关于如何在Pharo中使用Unified FFI的文档很少。我想知道如何处理以下情况......
假设你有一个带有以下函数签名的共享C库(名为testlib.so):
void func1(int *buf);
你如何使用uFFI来调用这个函数?您将如何完成以下代码片段:
self ffiCall: #( void func1(??? buf) ) module: 'testlib.so'.
其中buf应该保存func1放入的任何整数值。也许在ffiCall之前需要以某种方式准备buf?
答案 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