我在 C 中嵌入了 Ruby,我需要将在 C 中创建的结构传递给 Ruby 脚本,我想在其中使用结构值。我已经通过结构声明 rb_struct_define
和初始化 rb_struct_new
成功完成了这项工作,但我无法传递以 C 风格定义的结构(struct Address { ...}
).
我得到一些建议,可以使用 Data_Wrap_struct
来完成,但我无法让它工作。
我的示例代码在这里:https://gist.github.com/1641269
最佳答案
无论您传递给 Ruby 方法的什么都需要是 Ruby 对象,您不能直接传递 C 结构对象。
您可以做的是为您的结构创建一个包装器对象,它将提供对其成员的 Ruby 代码访问。不幸的是,据我所知,没有办法根据结构的成员自动执行此操作。您必须编写 C 代码来定义适当的方法,如果您的结构有很多成员,这可能会有点乏味。
Data_Wrap_Struct
宏用于将 C 结构包装在 Ruby 对象中。然后,您可以在方法的实现中使用 Data_Get_Struct
来解包结构并获取数据。
Here's an example这应该有望为您指明正确的方向。
关于ruby - 将 C 初始化的结构传递给嵌入式 Ruby 解释器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8931853/