如何在Pharo中使Unified FFI工作

时间:2017-05-22 18:47:04

标签: pharo

我有一个C函数将字符串复制到传递给它的缓冲区中:

void get_machine(char *buf) {
    /* do something to acquire the machine string */
    strcpy(buf, machine_string);
}

我想从Pharo调用它:

machine := String new: 256.
self ffiCall: #( void get_machine(String machine) ) module: 'ffilibc.so'.

但是这不起作用:machine_string的内容不会被复制到机器中。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

我了解到String缓冲区是不可变的。这就是为什么C函数无法写入它。

解决方案是使用ByteArray。

答案 1 :(得分:2)

"它不起作用"太模糊了你能告诉我你的错误是什么吗?

如果"模块未找到",这是因为您需要提供完整路径(除非库与图像位于同一位置)。还记得库需要编译为32位。