Не удается загрузить модуль lua dll - PullRequest
2 голосов
/ 06 апреля 2020

Я не могу загрузить модуль lua, который является 32-битным c ++ dll. Модуль lua и код lua находятся в одной папке.

в коде c ++:

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

lua первая строка:

local luartmidi = require 'luartmidi'

Когда я запускаю код lua с кодом lua 32-битный отладчик, я получаю сообщение об ошибке:

Исключение: [C]: - 1: ошибка загрузки модуль ... из файла ...

Указанная функция не может быть найдена

Обозреватель зависимостей сообщает, что LUA .DLL отсутствует. Когда я копирую lua .dll в ту же папку, я получаю сообщение об ошибке

c: Пользователи / xyz / .vscode / extensions / actboy168. lua -debug-1.23.1 / runtime /win32/lua53/lua.exe: обнаружено несколько Lua виртуальных машин

1 Ответ

3 голосов
/ 06 апреля 2020

Это происходит, когда вы статически связываетесь с интерпретатором lua, а затем пытаетесь загрузить внешний модуль, который связывается с Lua DLL (и ожидает присутствия lua .dll или библиотеки с аналогичным именем). Вы не можете одновременно иметь статически скомпилированный и загруженный из DLL интерпретатор, который будет присутствовать в одном и том же процессе (сообщение «несколько Lua ВМ обнаружены» запускается при проверке этого условия).

У вас есть три варианта:

  1. Статическая компиляция всего (не загружайте внешние модули)
  2. Динамическая компиляция (не связывайте интерпретатор Lua статически)
  3. Используйте прокси-библиотеку, которая будет перенаправлять вызовы API из внешних библиотек в статически связанный интерпретатор Lua (потребуется экспорт символов Lua и запись в прокси-библиотеку). См. http://lua-users.org/wiki/LuaProxyDllFour ссылки для кода и деталей (это для Lua 5.1, но вы можете настроить скрипт для Lua 5.3).
...