C 如何在ruby Fiddle中处理数组指针
我正在尝试从Ruby FFI切换到Fiddle,它现在是Ruby std库的一部分 虽然它没有文档记录,但我很难弄清楚如何处理数组和指针。特别是,我如何将Fiddle接口写入C函数,如下所示:C 如何在ruby Fiddle中处理数组指针,c,ruby,arrays,C,Ruby,Arrays,我正在尝试从Ruby FFI切换到Fiddle,它现在是Ruby std库的一部分 虽然它没有文档记录,但我很难弄清楚如何处理数组和指针。特别是,我如何将Fiddle接口写入C函数,如下所示: void my_func(double *, size_t len) free = Fiddle::Function.new(Fiddle::RUBY_FREE, [TYPE_VOIDP], TYPE_VOID) p = Pointer.malloc(SIZEOF_DOUBLE*len, free)
void my_func(double *, size_t len)
free = Fiddle::Function.new(Fiddle::RUBY_FREE, [TYPE_VOIDP], TYPE_VOID)
p = Pointer.malloc(SIZEOF_DOUBLE*len, free)
my_func(p,len)
将其映射到Ruby非常简单:
module Test
extend Fiddle::Importer
dlload './lib/libTest.dylib'
extern 'void my_func(double *, size_t)'
end
但是,如何构建指向数组的指针,作为第一个参数传递?
谢谢 你是说用ruby构建一个c数组和这个数组的指针 您可以这样尝试:
void my_func(double *, size_t len)
free = Fiddle::Function.new(Fiddle::RUBY_FREE, [TYPE_VOIDP], TYPE_VOID)
p = Pointer.malloc(SIZEOF_DOUBLE*len, free)
my_func(p,len)
这样称呼:
void my_func(double *, size_t len)
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函数