将C初始化结构传递给嵌入式Ruby解释器

时间:2012-01-19 19:12:08

标签: ruby embedding

我在Ruby中嵌入Ruby,我需要将在C中创建的结构传递给Ruby脚本,我想在其中使用struct值。我已成功完成了结构声明rb_struct_define和初始化rb_struct_new,但我无法传递以C风格(struct Address {...})定义的结构。

我得到了一些建议,可以使用Data_Wrap_struct来完成,但我无法让它正常工作。

我的示例代码在这里:https://gist.github.com/1641269

1 个答案:

答案 0 :(得分:2)

无论您传递给Ruby方法的是什么,都需要成为Ruby对象,您无法直接传递C结构对象。

您可以做的是为您的struct创建一个包装器对象,该对象将为其成员提供Ruby代码访问。不幸的是,据我所知,没有办法根据结构的成员自动执行此操作。您必须编写C代码来定义适当的方法,如果您的struct有很多成员,这可能会有点乏味。

Data_Wrap_Struct宏用于将C结构包装在Ruby对象中。然后,您可以在方法的实现中使用Data_Get_Struct来解包结构并获取数据。

Here's an example希望能指出正确的方向。