如何处理ruby Fiddle中的数组指针

时间:2013-11-02 16:18:10

标签: c ruby arrays

我正在尝试从Ruby FFI切换到Fiddle,现在它是Ruby std lib的一部分。

虽然它没有文档,但我很难弄清楚如何处理数组和指针。特别是,如何将Ciddle接口写入C函数,如下所示:

void my_func(double *, size_t len)

将它映射到Ruby非常简单:

module Test
  extend Fiddle::Importer
  dlload './lib/libTest.dylib'
  extern 'void my_func(double *, size_t)'
end

但是,我如何构建一个指向数组的指针,作为第一个参数传递? 谢谢!

1 个答案:

答案 0 :(得分:1)

你的意思是在ruby中构建一个c数组和这个数组的指针?

你可以这样试试:

free = Fiddle::Function.new(Fiddle::RUBY_FREE, [TYPE_VOIDP], TYPE_VOID)
p = Pointer.malloc(SIZEOF_DOUBLE*len, free)

并且这样打电话:

my_func(p,len)

当不使用此内存块时,ruby GC将调用free函数。