如何在Pharo中使用Unified FFI进行整数缓冲

时间:2017-05-24 00:41:41

标签: pharo

关于如何在Pharo中使用Unified FFI的文档很少。我想知道如何处理以下情况......

假设你有一个带有以下函数签名的共享C库(名为testlib.so):

void func1(int *buf);

你如何使用uFFI来调用这个函数?您将如何完成以下代码片段:

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

其中buf应该保存func1放入的任何整数值。也许在ffiCall之前需要以某种方式准备buf?

1 个答案:

答案 0 :(得分:1)

这一切都通过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