我以前使用SWIG成功创建了Ruby-C ++绑定,其中C ++代码被编译为动态库,并且Ruby脚本连接到它。
但是,我想反过来做。使用C ++创建可执行文件并使其能够加载和执行Ruby代码。 Ruby也应该能够调用在C ++端定义的函数(当然,我需要的只是'system()'调用。)
SWIG是否提供了实现此目的的手段?
答案 0 :(得分:3)
答案 1 :(得分:2)
SWIG解决了部分问题:它允许您创建与您编写的C ++函数的Ruby绑定。问题的另一半,制作一个可以评估Ruby代码的C ++程序,可以像你希望的那样简单或复杂。
简单的方法是将程序分成两半:一个存在于dll中的红宝石可访问部分,以及一个与该dll链接并通过system()
调用Ruby的不可访问部分。
稍微高一点,您可以使用C ++中的ruby C API来运行Ruby代码。这使您可以更好地控制Ruby代码的执行方式,并为您提供机会来执行诸如将所有执行的Ruby包装在从Ruby异常生成C ++异常的块中。这里的缺点是你需要了解Ruby的C API,这不是很糟糕,但肯定不像Lua那样友好。
如果你想要的不止于此,那么你就会深入水域。 Ruby和C ++都是复杂的语言,让它们进行互操作是一个真正的挑战。 ÉricMalenfant的链接可能对您有所帮助。