#ruby #ffi
#ruby #ffi
Вопрос:
У меня есть статический массив структур на C, который я хотел бы прочитать на Ruby.
Структура данных C выглядит следующим образом:
typedef struct myStruct {
char *name;
int val;
} myStruct;
myStruct myData[] = {
{"First", 0},
{"Second", 1},
{"Third", 2}
};
Как я могу прочитать массив myData из Ruby, используя FFI и attach_variable?
У меня есть этот код 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
Ответ №1:
Боюсь, что нет особенно хорошего способа. 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