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

3
我正在将 Ruby 嵌入到 C 中,需要将在 C 中创建的结构体传递给 Ruby 脚本,在其中我想要使用结构体值。我已经成功地使用结构体声明rb_struct_define和初始化rb_struct_new完成了这个任务,但是我无法传递一个以 C 样式(struct Address {…} )定义的结构体。
我得到了一些建议,可以使用Data_Wrap_struct来完成此操作,但我无法使其正常工作。
我的示例代码在此处: https://gist.github.com/1641269
1个回答

2
无论您传递给 Ruby 方法什么,都需要是 Ruby 对象,不能直接传递 C 结构对象。
您可以创建一个结构体的包装对象,为其提供 Ruby 代码访问其成员的方式。不幸的是,据我所知,没有办法根据结构体的成员自动执行此操作。如果您的结构体有很多成员,则必须编写 C 代码来定义适当的方法,这可能会有点繁琐。 Data_Wrap_Struct 宏是用于将 C 结构体包装在 Ruby 对象中的宏。然后,您可以在方法的实现中使用 Data_Get_Struct 来取消包装结构体并获取数据。
这里是一个示例,希望能指引您正确的方向。

非常感谢,您的示例非常完美,肯定指引了我正确的方向。我已经寻找类似的内容好几个小时了。 - matejuh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接