Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从ErlangC NIF返回指针_C_Pointers_Erlang_Erlang Nif - Fatal编程技术网

从ErlangC NIF返回指针

从ErlangC NIF返回指针,c,pointers,erlang,erlang-nif,C,Pointers,Erlang,Erlang Nif,在编写Erlang C NIF时,如何将在C中创建的指针(比如数组)返回到Erlang,以供同一Erlang进程在另一个NIF调用中使用 #define LENGTH = 50; int *a, array[LENGTH]; a = enif_alloc(LENGTH * sizeof(int)); 它应该是一个可以返回甚至存储的指针,这样当我从同一个Erlang进程返回NIF时,我可以访问指针及其引用的内存。要从NIF返回二进制文件,我使用enif_alloc_binary和eni

在编写Erlang C NIF时,如何将在C中创建的指针(比如数组)返回到Erlang,以供同一Erlang进程在另一个NIF调用中使用

 #define LENGTH = 50;

 int *a, array[LENGTH];

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

它应该是一个可以返回甚至存储的指针,这样当我从同一个Erlang进程返回NIF时,我可以访问指针及其引用的内存。

要从NIF返回二进制文件,我使用enif_alloc_binary和enif_make_binary。然后在Nif中访问二进制文件中的指针传递,并在参数上使用enif_inspect_binary来获取包含数据指针的ErlNifBinary。

在这种特殊情况下,我将使用
enif_alloc_resource
。创建一个包含指针和指针的结构

您也可以将其编码为二进制,但我建议您不要这样做,因为它允许erlang函数在将其传递回之前修改内容。资源类型在erlang端是不透明的,无法修改