我有一个 C 语言结构的静态数组,我想在 Ruby 中读取它。
C语言的数据结构是这样的:
typedef struct myStruct {
char *name;
int val;
} myStruct;
myStruct myData[] = {
{"First", 0},
{"Second", 1},
{"Third", 2}
};
如何使用 FFI 和 Attach_variable 从 Ruby 读取 myData 数组?
我有这个 ruby 代码:
module MyLib
class MyStruct < FFI:Struct
layout :name, :string,
:val, :int
end
attach_variable :myData, :myData, :pointer
def self.readDataArray
pointer = myData
??? how to use this with MyStruct to iterate through the array ???
end
end
请您参考如下方法:
恐怕没有特别好的方法。 read_array_of_type
不适用于结构。
您可以使用简单的指针算术来实现此目的:
def self.readDataArray
pointer = myData
array_of_structs = 3.times.map { |idx|
MyStruct.new(pointer + idx * MyStruct.size)
}
# Do your business
end