2013-01-19 77 views
0

在編寫Erlang C NIF時,如何將C中創建的指針稱爲數組,並返回給Erlang以供以後在另一個NIF調用中使用相同的Erlang進程?來自Erlang C的返回指針NIF

#define LENGTH = 50; 

int *a, array[LENGTH]; 

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

應該是可以返回,甚至存儲,這樣,當我從同一個Erlang進程中返回NIF我可以訪問指針,並通過其引用的內存的指針。

回答

2

在這種特殊情況下,我會使用enif_alloc_resource。創建一個結構來包含你的指針和establish it as a resource object

您也可以將其編碼爲二進制文件,但是我建議您不要這樣做,因爲它會允許erlang函數在將其傳遞回來之前修改其內容。資源類型在erlang一側是不透明的,無法修改。

0

要從NIF返回二進制文件我使用enif_alloc_binary和enif_make_binary。然後在將訪問指針的Nif中傳遞二進制文件,並在參數上使用enif_inspect_binary來獲取包含指向數據的指針的ErlNifBinary。