有什么方法可以将 Ruby 对象传递给 C++ 应用程序吗?我以前从未做过这样的事情,并且想知道这是否可能。是否需要修改Ruby核心代码?
分别是,和否。
Ruby 是用 C 编写的。C++ 在设计上是与 C 兼容的。
Ruby 中的所有对象都由 VALUE 对象(这是一个
union
类型)保存,可以很容易地传递它。
您发现的使用 C 扩展 Ruby 的任何指示都适用于 C++,只需稍作修改。或者,您可以使用 SWIG 之类的工具来简化扩展的编写。
用 C++ 扩展 Ruby 不是问题。基本上,编写扩展时您需要记住的唯一一件事是将扩展的 init 方法声明为 extern "C",如下所示:
extern "C" void Init_your_extension() { // ... }
我最近不得不向我的 ruby 代码公开一个 C++ 函数,如果您愿意,您可以在这里找到代码(它只是基本的东西,所以我认为这会很好地帮助您开始):http://github.com /psyho/aspell_edit_dist
《Programming Ruby》一书有一些有关从 C 访问 Ruby 的详细信息。但我不确定文档的最新程度。这篇博客文章也描述了 Ruby C API。