如何从Lua调用C ++ DLL中的函数?

时间:2010-05-14 16:15:00

标签: c++ dll interface lua

我有一个用C ++编写的DLL,它是遗留代码,无法修改源代码。我希望能够从Lua调用DLL内部的一些函数。

例如,我想做这样的事情:

-- My Lua File
include(myCppDll.dll)

function callCppFunctionFromDll()
     local result = myCppFunctionFromDll(arg1, arg2)
     --Do something with result here
end

这样的事情可能吗?

3 个答案:

答案 0 :(得分:3)

答案 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 ++代码。