在編寫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我可以訪問指針,並通過其引用的內存的指針。
在編寫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我可以訪問指針,並通過其引用的內存的指針。
在這種特殊情況下,我會使用enif_alloc_resource
。創建一個結構來包含你的指針和establish it as a resource object。
您也可以將其編碼爲二進制文件,但是我建議您不要這樣做,因爲它會允許erlang函數在將其傳遞回來之前修改其內容。資源類型在erlang一側是不透明的,無法修改。
要從NIF返回二進制文件我使用enif_alloc_binary和enif_make_binary。然後在將訪問指針的Nif中傳遞二進制文件,並在參數上使用enif_inspect_binary來獲取包含指向數據的指針的ErlNifBinary。