无法加载 lua dll 模块

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

c++ 代码中:

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

lua 第一行:

local luartmidi = require 'luartmidi'

我用 vs code lua 32位调试器运行 lua 代码时,会收到以下错误信息:

Exception has occurred: [C]:-1: error loading module ... from file ...

The specified function could not be found

Dependency Walker 指出 LUA.DLL 丢失。当我把 lua.dll 复制到同一个文件夹中时,我遇到错误

c:Users/xyz/.vscode/extensions/actboy168.lua-debug-1.23.1/runtime/win32/lua53/lua.exe: multiple Lua VMs detected

点赞
用户1442917
用户1442917

当你使用静态链接方式连接 Lua 解释器,然后尝试加载一个链接到 Lua DLL 的外部模块(并期望 lua.dll 或类似命名的库已经存在),就会发生这种情况。你不能同时在同一进程中拥有一个静态编译的解释器和从 DLL 加载的解释器(“检测到多个 Lua VMs”消息由对这种情况的检查触发)。

你有三个选择:

  1. 编译所有东西静态地(不要加载任何外部模块)
  2. 编译所有东西动态地(不要静态链接 Lua 解释器)
  3. 使用代理库将外部库的 API 调用转发到静态链接的 Lua 解释器(需要导出 Lua 符号并编写代理库)。有关代码和详细信息,请参见 http://lua-users.org/wiki/LuaProxyDllFour (它是针对 Lua 5.1 的,但您可以调整脚本以适用于 Lua 5.3)。
2020-04-06 17:43:05