2017-05-24 15 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