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