1

我有以下 C 代码:

typedef void (*mycallback) (char buf[128]);
void take_callback(mycallback cb)
{
}

我已经编写了如下等效的 Ruby FFI 声明(遵循FFI wiki上的 structs 建议):

  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 的特性。这里真正正确的语法是什么?

4

1 回答 1

2

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

于 2012-04-03T00:00:20.933 回答