0

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

 #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。然后在将访问指针的 N​​if 中传递二进制文件并在参数上使用 enif_inspect_binary 来获取包含指向数据的指针的 ErlNifBinary。

于 2013-01-22T03:06:11.870 回答