我需要在Lua中加载DLL文件以连接不同的API。我知道可以加载C类型的dll,但我所拥有的是用C ++生成的dll文件。
生成此库的代码(在C ++中)的格式为:
// MyAPI.h
namespace MyAPI
{
public class MyFirstClass
{
public:
MyFirstClass();
void performSomeMethod(int arg);
}
}
然后生成了dll文件MyAPI.dll
。当我现在尝试在Lua中导入它时,使用:
require "MyAPI"
它会立即显示错误:error loading module 'MyAPI' from file '.\MyAPI.dll': The specified procedure could not be found
。我不明白这意味着什么,或者如何摆脱它。一般来说,Lua不能包含C ++库(即我应该编写另一个C包装器吗?)还是有办法做到这一点?
答案 0 :(得分:3)
您需要导出一个名为luaopen_ MyAPI
的C函数,该函数遵循C-Lua API。其余的代码可以是C ++。
答案 1 :(得分:3)
我的理解是你需要一个带有C入口点而不是C ++入口点的C包装器。 C ++确实命名为mangling,因此它可以根据编译器以及方法签名等动态更改。
以下是Anatomy of a Lua to C Call,您可能会觉得有帮助。
另见stack overflow discussion on what goes on with dll loading。
答案 2 :(得分:3)