Serg_,
я открыл выложенный вами проект.
На форуме вы приводите один текст, одни названия функций - в вашем проекте все совершенно иначе называется.
Я пишу вам:
swerg пишет:Исправьте:
extern "C" LUALIB_API int luaopen_lua_dll_x64_name(lua_State * L) {
luaL_newlib(L, ls_lib);
return 1;
}
Что видим в вашем проекте:
extern "C" LUALIB_API int luaopen_Quil_Lua_connector(lua_State * L)
{
lua_setglobal(L, "Quil_Lua_connector");
luaL_newlib(L, ls_lib);
return 1;
}
Почему? зачем?
Тяжело же вот так вот "удаленно" общаться, когда производятся совершенно другие действия.
Хорошо, основная проблема.
Вы писали, что когда все же собралось - то при запуске скрипта с вызовом библиотеки QUIK падает с исключением.
Да, это основная проблема была в вашем проекте.
Вы взяли не знаю какие и откуда взятые библиотеки lua53.lib / lua54.lib. Собственно в них вся и проблема.
В ваших lib-файлах полностью вшит интерпретатор Lua, и, судя по всему, это какие-то бинарно не совместимые сборки с имеющимися в QUIK lua53.dll и lua54.dll. Но для корректной работы вашей библиотеки в составе QUIK вызовы функций Lua-API должны осуществляться из lua53.lib / lua54.lib. Только тогда ваша библиотека будет работать корректно в составе QUIK и, в особенности, в части многопоточности. А для этого надо изготовить такие lua53.lib / lua54.lib, которые были бы лишь обертками для вызова из lua53.dll и lua54.dll. Как это сделать - описано в интернете.
Я вас несколько раз просил: возьмите за основу выложенный проект. Там все это уже сделано, продумано, проверено, lib-файлы лежат какие надо, настроены варианты сборки
Release для Lua5.1 (уже неактуально, конечно)
Release53 для Lua5.3
Release54 для Lua5.4
Все уже настроено, в относительными путями и т.д.
Но вы пошли путём "с нуля". Оно в общем-то похвально, но одно мне досадно: раз уж вы самостоятельно выбради путь "пройти по всем граблям" - зачем вы ругаете инструкции? да еще подозреваете всех вокруг, что "ни у кого на самом деле не работает".
Некрасиво это.
Итого.
1. Исправьте тело функции luaopen_Quil_Lua_connector в вашем проекте на:
extern "C" LUALIB_API int luaopen_Quil_Lua_connector(lua_State * L) {
luaL_newlib(L, ls_lib);
return 1;
}
2. Сделайте самостоятельно lib-библиотеки на основании lua*.dll файлов, либо возьмите готовые lib-файлы с проекта на гитхабе из первого сообщения данной темы.
3. Исправьте тестовый Lua-скрипт на:
Quil_Lua_connector = require("Quil_Lua_connector")
message(Quil_Lua_connector.TestFunc())
4. Перекомпилируйте заново проект вашей библиотеки, подложите собранную dll в каталог с QUIK - и все заработает!