2010-05-14 135 views
4

我有一个使用C++编写的遗留代码的DLL,无法修改源代码。我希望能够从Lua调用DLL中的一些函数。如何从Lua中调用C++ DLL中的函数?

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

-- My Lua File 
include(myCppDll.dll) 

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

是这样的可能吗?

回答

3

如果外国人不能满足您的需求,这可能并不容易,如果DLL有一个强烈的面向对象的接口使用您需要获取对象的成员和方法以及调用导出的函数,然后您应该查看生成一个将DLL中的旧API与Lua进行接口的包装器DLL。

这可以通过一个包装器生成器来完成,比如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的页面。

0

您将不得不使用自动工具,或手动编写C++接口。 Lua无法处理直接的C++代码。