返回指针从Erlang C NIF



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

 #define LENGTH = 50;
 int *a, array[LENGTH];
 a = enif_alloc(LENGTH * sizeof(int));

它应该是一个可以返回甚至存储的指针,以便当我从相同的Erlang进程中返回到NIF时,我可以访问指针和它引用的内存。

在这种特殊情况下,我将使用enif_alloc_resource。创建一个包含指针的结构体,并将其建立为资源对象。

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

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

相关内容

  • 没有找到相关文章

最新更新