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

标签 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 数组?

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

关于ruby - 如何使用 ruby​​ FFI 读取静态结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24461466/

相关文章:

ruby-on-rails - ruby 的神经网络

ruby - 这个 ruby​​ 片段是如何工作的?

haskell - c2hs 没有正确安装/注册

lua - 从要使用 FFI 调用的 Rust 函数返回字符串

haskell - 与调用 select() 的代码交互

css - 在 heroku 上发布部署 rails 应用程序

Ruby gsub 不会转义单引号

Ruby 正则表达式匹配意外字符

c++ - 如何在 Rust 中为 ArmA 3 DLL 实现 RVExtension 函数?

ruby - 如何将 C 常量包装在 Ruby FFI 模块中?