我有以下 C 代码:
typedef void (*mycallback) (char buf[128]);
void take_callback(mycallback cb)
{
}
我编写了等效的 Ruby FFI 声明,如下所示(遵循 FFI wiki 上的结构建议):
callback :mycallback, [[:char, 128]], :void
attach_function :take_callback, [:mycallback], :void
当我运行它时,出现以下错误:
`find_type': unable to resolve type '[:char, 128]' (TypeError)
看来我没有正确声明回调中的 char 数组。从数组在 C 中函数参数中的工作方式来看,我认为我应该使用 :pointer
而不是 [:char, 128]
。但我不确定 FFI 的特殊性。这里真正正确的语法是什么?
最佳答案
在 C 中数组不是按值传递的——它们作为指向第一个元素的指针传递,因此 :pointer
(或者通常用于 char *
的内容) >) 应该是正确的。
关于c - 在 Ruby FFI 中声明 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985372/