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

标签 ruby embedding

我在 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/

相关文章:

ruby - 什么样的名称对于 Ruby 方法是合法的?

ruby - 如何最好地包装 Ruby optparse 代码和输出?

ruby - 将字符串拆分为 Ruby 中的一对字符

ruby - 我的代码的 Big-O 复杂度是多少?

java - 如何使用 POI 从 excel 导出嵌入式文件?

javascript - firefox 选项卡中的 firebug 或 'how to embed a custom editor' 编辑器?

azure - 将项目上传到 Azure 认知搜索索引时出现 'Request Entity Too Large' 错误 - 如何解决?

ruby-on-rails - 如果 URL 中没有文件名,我可以确定它是否指向图像吗?

Lua问题: attempt to call global 'unpack' (a nil value)

python - 从 anaconda PyThreadState_Get : no current thread 在 C/C++ 中嵌入 Python