可以在Lua中加载C++dll文件吗
Can a C++ dll file be loaded in Lua?
我需要在Lua中加载一个DLL文件来连接不同的API。我知道可以加载C类型的dll,但我有一个用C++生成的dll文件。
产生这个库的代码(C++)的形式是:
// MyAPI.h
namespace MyAPI
{
public class MyFirstClass
{
public:
MyFirstClass();
void performSomeMethod(int arg);
}
}
然后产生dll文件CCD_ 1。当我现在尝试在Lua中导入这个时,使用:
require "MyAPI"
它立即给出错误:CCD_ 2。我不明白这意味着什么,也不知道如何摆脱它。Lua是否可以不包括C++库(即,我应该写另一个C包装器吗?)或者有办法做到这一点吗?
是的,可以做到。公开一个C函数加载程序luaopen_MyAPI
,您可以在其中调用使用任何类型的C++Lua Wrapper的函数,如LuaBridge、LuaBind或其他函数。如果您在C++中的调用不符合绑定的规则,例如生存期管理、按值传递对象等,您可能需要将这些类包装成可绑定的类。
例如,参见pugilua
- pugilua_lib.h-模块加载器API
- pugilua_lib.cpp-包装类和LuaBridge绑定
- pugilua.cpp-从模块加载程序调用绑定
您需要导出一个名为luaopen_ MyAPI
的C函数,该函数遵循C-Lua API。其余的代码可以是C++。
我的理解是,您需要一个带有C入口点而不是C++入口点的C包装器。C++进行名称篡改,因此它可以根据编译器以及方法签名等动态更改。
以下是Lua-to-C调用的解剖,您可能会发现它很有用。
另请参阅关于dll加载的堆栈溢出讨论。
这里是另一个关于require和dll加载的堆栈溢出讨论。
这是一篇关于名称篡改问题的简短文章。
相关文章:
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 将 dll 文件注入 UWP
- 从 .lib 文件创建一个.dll文件
- 使用dll源代码C++调试dll文件
- 如何将我的程序转换为.dll文件并使用rundll32.exe在cmd中运行它?
- 提升 Python 找不到 dll 文件
- 为什么它无法在 c++ 中全局声明一个构建为 dll 文件的类?
- 尝试在 python 中正确加载和使用 dll 文件
- 如何在运行时从 c++ 中的 DLL 文件创建对象?
- 是否可以单步执行.dll文件中定义的成员函数?
- 是否有其他方法将.dll文件从一个项目复制到我的启动项目中的可执行文件旁边
- 设置所需DLL文件的自定义路径:电子应用
- LUA5.3 DLL文件中缺少名称
- 如何在 go 中调用带有 .lib 和.dll文件的预构建 API
- 将字符串从 C# 发送到 dll 文件C++
- DLL文件中函数的预期行为在C中编写并从CPP文件打电话
- 如何在VS项目中静态链接没有dll文件的cpprest?
- 加载C DLL文件时,如何修复异常_access_violation
- 编译时如何隐藏DLL文件中的字符串?
- 找不到 C# C++ DLL 文件