加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 21:43:09 所属栏目:大数据 来源:网络整理
导读:我有一个用C编写的DLL,它是遗留代码,无法修改源代码.我希望能够从 Lua调用DLL内部的一些函数. 例如,我想做这样的事情: -- My Lua Fileinclude(myCppDll.dll)function callCppFunctionFromDll() local result = myCppFunctionFromDll(arg1,arg2) --Do someth
我有一个用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的页面.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读