1

我过去使用 SWIG 成功创建了 Ruby-C++ 绑定,其中 C++ 代码被编译为动态库,Ruby 脚本连接到它。

但是,我想反过来做。使用 C++ 创建可执行文件并使其能够加载和执行 Ruby 代码。Ruby 也应该能够调用在 C++ 端定义的函数(当然,否则我需要的只是 'system()' 调用。)

SWIG 是否提供了实现这一目标的方法?

4

2 回答 2

3

您可能对嵌入到 C++ 中的 Ruby感兴趣

于 2009-10-16T13:21:49.293 回答
2

SWIG 解决了您的部分问题:它允许您创建与您编写的 C++ 函数的 Ruby 绑定。问题的另一半,即制作一个可以评估 Ruby 代码的 C++ 程序,可以随心所欲地简单或复杂。

简单的方法是将你的程序分成两半:一个存在于 dll 中的 ruby​​ 可访问部分,以及一个与该 dll 链接并通过system().

在稍高一点的层次上,您可以使用来自 C++ 的 ruby​​ 的 C API 来运行 Ruby 代码。这使您可以更好地控制 Ruby 代码的执行方式,并让您有机会做一些事情,例如将所有已执行的 Ruby 包装在从 Ruby 异常生成 C++ 异常的块中。这里的缺点是您需要了解 Ruby 的 C API,这并不糟糕,但肯定不如 Lua 的那么友好。

如果你想要更多,那么你就陷入了深渊。Ruby 和 C++ 都是复杂的语言,让它们互操作是一个真正的挑战。Éric Malenfant 的链接可能对您有用。

于 2009-10-20T23:35:54.120 回答