我一直在尋找如何紅/系統掛接與Windows中的DLL,Linux的/ Android的的.so共享庫和C庫函數OS/X名爲.dylib,與#import
語法:如何創建一個紅色/系統綁定到一個函數,該函數需要一個指向指針的指針?
#import [
"libc.so.6" cdecl [
allocate: "malloc" [
size [integer!]
return: [byte-ptr!]
]
free: "free" [
block [byte-ptr!]
]
/* ... */
]
適用於所有基本類型,但是當一個函數需要一個指針指針時你會做什麼?舉例來說,如果你試圖綁定到類似getline()
,其原型是什麼:
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
的一種方式(我要打電話的方式...)就是傳入lineptr是不是預先分配的緩衝區,而是null
。在這種情況下,getline會爲您分配緩衝區並修改char *,使其不再爲空。
作爲第一次嘗試,我所做的:
getline: "getline" [
lineptr [byte-ptr!] ;-- char **
n [pointer! [integer!]] ;-- size_t *
stream [byte-ptr!] ;-- FILE *
return: [integer!] ;-- ssize_t
]
但因爲沒有這樣的事,作爲一個pointer! [c-string!]
或類似的,我不知道如何調用它。我可以得到一個c-string!
局部變量的地址,並以某種方式將它作爲byte-ptr!
傳遞給它?
謝謝!雖然從LIBC的getline返回的行是檢索行的長度(不是字符串),但它可以工作,所以它將是一個整數...您可以編輯您的答案(我也可以)。但我會讓你這樣做。 :-) – HostileFork
的確,謝謝,編輯。 –