使用C ++扩展Ruby?

时间:2010-01-13 01:30:58

标签: c++ ruby

有没有办法将Ruby对象传递给C ++应用程序?我之前从未做过那种事情,并且想知道这是否可行。是否需要修改Ruby核心代码?

4 个答案:

答案 0 :(得分:5)

是,不,分别。

Ruby是用C编写的.C ++在设计上是C兼容的。

Ruby中的所有对象都由VALUE对象(union类型)保存,可以很容易地传递。

您发现使用C扩展Ruby的任何指示都适用于C ++,几乎没有任何修改。或者,您可以使用类似SWIG的内容来简化编写扩展程序。

答案 1 :(得分:1)

Programming Ruby书中有关于从C访问Ruby的一些细节。我不知道文档目前的最新情况。这个blog post也描述了Ruby C API。

答案 2 :(得分:1)

使用C ++扩展Ruby不是问题。基本上,编写扩展时唯一需要记住的就是将扩展的init方法声明为extern“C”,如下所示:

extern“C”void Init_your_extension(){   // ... }

我最近不得不向我的ruby代码公开一个C ++函数,你可以在这里找到代码(它只是基本的东西,所以我认为让你开始是好的):http://github.com/psyho/aspell_edit_dist < / p>

答案 3 :(得分:0)

您可以使用Rice在C ++中构建Ruby扩展,请查看http://www.ibm.com/developerworks/library/os-extendruby/