我过去使用 SWIG 成功创建了 Ruby-C++ 绑定,其中 C++ 代码被编译为动态库,Ruby 脚本连接到它。
但是,我想反过来做。使用 C++ 创建可执行文件并使其能够加载和执行 Ruby 代码。Ruby 也应该能够调用在 C++ 端定义的函数(当然,否则我需要的只是 'system()' 调用。)
SWIG 是否提供了实现这一目标的方法?
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 的链接可能对您有用。