如何从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

这种方法可行吗?

原文链接 https://stackoverflow.com/questions/2835716

点赞
stackoverflow用户6236
stackoverflow用户6236
2010-05-14 17:02:32
stackoverflow用户68204
stackoverflow用户68204

如果 Alien 不符合您的需求,并且如果 DLL 具有强烈的面向对象接口,您需要访问对象的成员和方法以及调用导出函数可能不容易,那么您应该考虑生成一个包装器 DLL,将遗留 API 从 DLL 接口到 Lua。

这可以通过包装器生成器(如 Swig)来完成,它将为基于类和函数声明的 Lua 编写包装器,常常只需要现有的 .h 文件作为输入。

Lua 代码也足够简单,因此手动用 C 编写自己的包装器可能更简单。要做到这一点,请从创建可调用模块的标准步骤开始,在 C 中实现将参数从 Lua 栈转换为适合每个 API 调用的形式的函数,调用 DLL,并将任何结果推回 Lua 栈。这也是利用 Lua 能够返回超过一个结果的地方,对于那些需要使用输出指针处理第二个(或更多)返回值的函数。Lua 用户 Wiki 上提供了 相关讨论 和一些样例代码。

Lua 用户 Wiki 还专门介绍了 将 Lua 绑定到其他语言 的页面。

2010-05-14 22:30:25
stackoverflow用户298661
stackoverflow用户298661

你将需要使用一个自动化工具或者手写 C++ 接口。 Lua 无法处理纯 C++ 代码。

2010-05-14 22:33:41