当前位置 : 主页 > 网络编程 > lua >

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

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有一个用C编写的DLL,它是遗留代码,无法修改源代码.我希望能够从 Lua调用DLL内部的一些函数. 例如,我想做这样的事情: -- My Lua Fileinclude(myCppDll.dll)function callCppFunctionFromDll() local result
我有一个用C编写的DLL,它是遗留代码,无法修改源代码.我希望能够从 Lua调用DLL内部的一些函数.

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

-- 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的页面.

网友评论