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

我有一个用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的页面.

相关文章

1.github代码实践源代码是lua脚本语言,下载th之后运行thmai...
此文为搬运帖,原帖地址https://www.cnblogs.com/zwywilliam/...
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能...
localfunctiongenerate_action(params)localscale_action=cc...
2022年1月11日13:57:45 官方:https://opm.openresty.org/官...
在Lua中的table(表),就像c#中的HashMap(哈希表),key和...