无法加载 lua dll 模块

Cannot load lua dll module

我无法加载 lua 模块,它是一个 32 位 c++ dll。 lua 模块和 lua 代码在同一文件夹中。

在 C++ 代码中:

extern "C" __declspec(dllexport) int luaopen_luartmidi(lua_State *L) {
    ...
}

lua第一行:

local luartmidi = require 'luartmidi'

当我 运行 使用 vs 代码 lua 32 位调试器的 lua 代码时,我得到 错误信息:

发生异常:[C]:-1:从文件加载模块...时出错...

找不到指定的函数

Dependency Walker 说缺少 LUA.DLL。当我在同一个文件夹中复制 lua.dll 时,出现错误

c:Users/xyz/.vscode/extensions/actboy168.lua-debug-1.23.1/runtime/win32/lua53/lua.exe: 多个Lua 检测到虚拟机

当您 link 静态地使用 lua 解释器,然后尝试加载 link 针对 Lua DLL 的外部模块(并期望一个lua.dll 或类似名称的库)。您不能在同一个进程中同时拥有一个静态编译的解释器和一个从 DLL 加载的解释器("multiple Lua VMs detected" 消息是通过检查这种情况触发的)。

您有三个选择:

  1. 静态编译所有内容(不加载任何外部模块)
  2. 动态编译所有内容(不要link Lua 静态解释器)
  3. 使用代理库将来自外部库的 API 调用转发到静态 linked Lua 解释器(将需要导出 Lua 符号并编写代理库).有关代码和详细信息,请参阅 http://lua-users.org/wiki/LuaProxyDllFour links(它适用于 Lua 5.1,但您可以调整 Lua 5.3 的脚本)。