在Ruby FFI中声明char数组

时间:2012-04-02 23:49:38

标签: c ruby callback ruby-ffi

我有以下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的特殊性。这里的语法真的是什么?

1 个答案:

答案 0 :(得分:2)

数组不会通过C中的值传递 - 它们作为指向第一个元素的指针传递,因此:pointer(或通常用于char *的任何内容)应该是正确的。