【问题标题】:Declaring char array in Ruby FFI在 Ruby FFI 中声明 char 数组
【发布时间】:2012-04-02 23:49:38
【问题描述】:

我有以下 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 ruby callback ruby-ffi


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2015-07-29
    • 2021-04-15
    相关资源
    最近更新 更多