我试图从红宝石调用C函数是这样的:红宝石FFI:多维数组
void foo(double *in_array, double *out_array)
其中:
in_array
是数组的数组将由被用于“foo”到 计算并返回:- 这也是一个数组数组,C函数将改变其内容。
我的包装看起来是这样的:
module FooLib
extend FFI::Library
ffi_lib "foo.so"
attach_function :Foo, [:pointer, :pointer], :void
end
而且我做的红宝石如下:
# Allocate the objects and prepare them
in_array = Matrix.build(10, 3) { rand }.to_a
out_array = Matrix.build(10, 3) { 0 }.to_a
FooLib.Foo(in_array, out_array)
,但我得到了以下错误:
:pointer argument is not a valid pointer (ArgumentError)
我可以理解我需要使用指向这些数组的指针而不是数组对象,但我不知道如何做到这一点。这是否意味着我需要使用LibC包装器在C中创建这些结构?
谢谢Momer。我已经看到了这一点(每次我引用LibC包装器的问题结束时)。但是一旦你拥有了这个功能,它就不是直截了当的了(我认为)你如何将它应用到多维数组中。我将添加一个解释如何做到这一点的答案。 – PJC