Skip to main content
 首页 » 编程设计

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

2025年01月19日11lonelyxmas

我有一个 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