【问题标题】:Return Pointer from Erlang C NIF从 Erlang C NIF 返回指针
【发布时间】:2013-01-03 07:13:38
【问题描述】:

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

 #define LENGTH = 50;

 int *a, array[LENGTH];

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

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

【问题讨论】:

    标签: c pointers erlang erlang-nif


    【解决方案1】:

    在这种特殊情况下,我会使用enif_alloc_resource。创建一个结构来包含您的指针和establish it as a resource object

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-09-01
        • 2013-09-29
        • 2016-03-30
        • 2010-12-25
        • 2013-01-03
        • 2014-12-19
        • 2016-10-06
        • 2016-06-10
        • 1970-01-01
        相关资源
        最近更新 更多