2017-05-24 9 views
1

PharoでUnified FFIを使用する方法に関するドキュメントはほとんどありません。私は...次のような状況に対処する方法を知っていただきたいと思いファロで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

関連する問題