0

Erlang C NIFを作成する場合、Cで作成されたポインター(たとえば配列)をErlangに返して、後で別のNIF呼び出しで同じErlangプロセスで使用できるようにするにはどうすればよいですか?

 #define LENGTH = 50;

 int *a, array[LENGTH];

 a = enif_alloc(LENGTH * sizeof(int));

同じErlangプロセス内からNIFに戻ったときに、ポインターとそれが参照するメモリーにアクセスできるように、ポインターを返すか、保存することもできます。

4

2 に答える 2

2

この特定のケースでは、を使用しますenif_alloc_resource。ポインタを含む構造体を作成し、それをリソースオブジェクトとして確立します

バイナリとしてエンコードすることもできますが、erlang関数がコンテンツを変更してから返すことができるため、これはお勧めしません。リソースタイプは、erlang側からは不透明であり、変更できません。

于 2013-01-22T20:55:10.717 に答える
0

Nifからバイナリを返すには、enif_alloc_binaryとenif_make_binaryを使用します。次に、ポインタにアクセスするNifで、バイナリを渡し、引数でenif_inspect_binaryを使用して、データへのポインタを含むErlNifBinaryを取得します。

于 2013-01-22T03:06:11.870 に答える