如何使用ruby FFI读取静态结构数组

时间:2014-06-27 22:08:49

标签: ruby ffi

我在C中有一个静态的结构数组,我想在Ruby中阅读。

C数据结构如下:

typedef struct myStruct {
  char *name;
  int val;

} myStruct;

myStruct myData[] = {
 {"First", 0},
 {"Second", 1},
 {"Third", 2}
};

如何使用FFI和attach_variable从Ruby读取myData数组?

我有这个红宝石代码:

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 个答案:

答案 0 :(得分: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