Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在ruby Fiddle中处理数组指针_C_Ruby_Arrays - Fatal编程技术网

C 如何在ruby Fiddle中处理数组指针

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)

我正在尝试从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)
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函数