2

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

虽然它没有记录,但我很难弄清楚如何处理数组和指针。特别是,我怎样才能为这样的 C 函数编写 Fiddle 接口:

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

但是,我怎样才能构建一个指向数组的指针,作为第一个参数传递呢?谢谢!

4

1 回答 1

2

你的意思是在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 函数。

于 2014-05-14T07:06:56.503 回答