我将ruby嵌入到c中,我需要将用c创建的struct传递给ruby脚本,在那里我需要处理struct值。我已经通过struct声明rb_struct_define和初始化rb_struct_new成功地做到了这一点,但是我无法传递以c样式(struct Address {...}定义的结构。
我得到了一些建议,可以使用Data_Wrap_struct来完成这项工作,但我无法让它工作。
我的示例代码如下:https://gist.github.com/1641269

最佳答案

无论传递给ruby方法的是什么,都必须是ruby对象,不能直接传递c struct对象。
您可以做的是为您的结构创建一个包装器对象,它将提供对其成员的ruby代码访问。不幸的是,据我所知,没有办法基于结构的成员自动执行此操作。您将不得不编写C代码来定义适当的方法,如果您的结构有很多成员,这可能会变得有点乏味。
宏是用来将c结构包装成ruby对象的。然后可以在方法的实现中使用Data_Wrap_Struct来展开结构并获取数据。
希望这能给你指明正确的方向。

10-07 19:29
查看更多