2017-05-24 19 views
1

關於如何在Pharo中使用Unified FFI的文檔很少。我想知道如何應對以下情況...如何在整個Pharo中使用Pharo中的Unified FFI

比方說,你有一個共享的C庫(稱爲testlib.so)用下面的函數簽名:

void func1(int *buf); 

你會如何使用uFFI來調用這個函數?你將如何完成以下代碼片段:

self ffiCall: #(void func1(??? buf)) module: 'testlib.so'. 

其中buf應該包含func1放入的任何整數值。也許buf需要在ffiCall之前以某種方式做好準備?

+0

不應該BUF是數組?我認爲準備工作應該是創建一個整數數組,作爲函數的參數 –

回答

0

這一切都經過ByteArray這種東西。

所以,像這樣:

SomeLib>>func1: aBuf 
self ffiCall: #(void func1(ByteArray * aBuf)) module: 'testlib.so'. 

"int being 4 bytes, and signed" 

inoutBuf := ByteArray new: 4. 
inoutBuf integerAt: 1 put: 42 size: 4 signed: true. 

SomeLib uniqueInstance func1: inoutBuf. 

out := inoutBuf at: 1 size: 4 signed: true. 

HTH