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