我試圖從紅寶石調用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