我有一个用C编写的DLL,它是遗留代码,无法修改源代码.我希望能够从 Lua调用DLL内部的一些函数. 例如,我想做这样的事情: -- My Lua Fileinclude(myCppDll.dll)function callCppFunctionFromDll() local result
例如,我想做这样的事情:
-- My Lua File include(myCppDll.dll) function callCppFunctionFromDll() local result = myCppFunctionFromDll(arg1, arg2) --Do something with result here end
这样的事情可能吗?
如果Alien不能满足您的需求,并且如果DLL具有强大的面向对象的接口,您需要获取对象的成员和方法以及只调用导出的函数,那么它可能不容易使用,那么您应该看看生成一个包装DLL,它将遗留API从DLL连接到Lua.这可以使用包装器生成器(如Swig)来完成,它将为Lua以及许多其他基于类和函数声明的脚本语言编写包装器,通常只需要将现有.h文件作为输入.
Lua也是足够简单的代码,因为在C中手动编写自己的包装器可能更简单.为此,从标准配方开始在C中创建Lua可调用模块,并实现从Lua堆栈传输参数的函数进入适合每个API调用的形式,调用DLL,并将任何结果推回到Lua堆栈上.这也是利用Lua能够为DLL中必须使用输出指针处理第二个(或更多)返回值的那些函数返回多个结果的能力的地方. Lua用户的Wiki上提供了discussion of the issues和一些示例代码.
在Lua用户的Wiki上还有一个致力于binding Lua to other languages的页面.