C++的dll文件能否在Lua中加载?

3

我需要在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"

当我尝试加载'MyAPI'模块时,它立即报错:error loading module 'MyAPI' from file '.\MyAPI.dll': The specified procedure could not be found。我不理解这是什么意思,也不知道怎么解决它。一般情况下,Lua无法包含C++库吗(我该编写另一个C包装器),还是有其他方法可以做到这一点?

3个回答

3

您需要导出一个名为luaopen_MyAPI 的C函数,该函数遵循C-Lua API。剩下的代码可以采用C ++。


3

3
可以做到。暴露一个C函数加载器luaopen_MyAPI,您可以调用使用任何类型的C++ Lua包装器(例如LuaBridgeLuaBind或其他)的函数。如果C++中的调用不符合绑定规则,例如生命周期管理,按值传递对象等,则可能需要将类包装为可绑定类。
有关示例,请参见pugilua
  • pugilua_lib.h-模块加载器API
  • pugilua_lib.cpp-包装器类和LuaBridge绑定
  • pugilua.cpp-从模块加载器调用绑定

@Yellow 很高兴能够帮到你! - Dmitry Ledentsov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接