我有一个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的内容不会被复制到机器中。这样做的正确方法是什么?
答案 0 :(得分:3)
我了解到String缓冲区是不可变的。这就是为什么C函数无法写入它。
解决方案是使用ByteArray。
答案 1 :(得分:2)
"它不起作用"太模糊了你能告诉我你的错误是什么吗?
如果"模块未找到",这是因为您需要提供完整路径(除非库与图像位于同一位置)。还记得库需要编译为32位。