#include <iostream>
#include <windows.h>
//=== Необходимые для Lua константы ============================================================================//
#define LUA_LIB
#define LUA_BUILD_AS_DLL
//=== Стандартная точка входа для DLL ==========================================================================//
BOOL APIENTRY DllMain(HANDLE hModule, DWORD fdwReason, LPVOID lpReserved)
{
//Вроде бы это не обязательно
return TRUE;
}
//=== Заголовочные файлы LUA ===================================================================================//
extern "C"
{
#include "C:\\Users\\Serg\\source\\repos\\Quil_Lua_connector\\Lua_staticlib_files_x64_5.4\\lauxlib.h"
#include "C:\\Users\\Serg\\source\\repos\\Quil_Lua_connector\\Lua_staticlib_files_x64_5.4\\lua.h"
}
#pragma comment(lib, "C:\\Users\\Serg\\source\\repos\\Quil_Lua_connector\\Lua_staticlib_files_x64_5.4\\lua54.lib")
//=== Заголовочные файлы LUA ===================================================================================//
//=== Реализация функций, вызываемых из LUA ====================================================================//
static int forLua_TestFunc(lua_State* L) {
lua_pushstring(L, "Привет из C/C++");
return(1);
}
//=== Регистрация реализованных в dll функций, чтобы они стали "видимы" для Lua ================================//
static struct luaL_Reg ls_lib[] = {
{"TestFunc", forLua_TestFunc},
{NULL, NULL}
};
//=== Регистрация названия библиотеки, видимого в скрипте Lua ==================================================//
extern "C" LUALIB_API int luaopen_lua_dll_x64_name(lua_State * L)
{
luaL_newlib(L, ls_lib);
lua_setglobal(L, "lua_dll_x64_name");
return 1;
}
3)Компилирую этот код release/x64 и Visual Studio Создает - lua_dll_x64_name.dll 4)Помещаю созданный .dll в папку с info.exe. 5)Запускаю Quik и запускаю следующий скрипт:
Код
path = getScriptPath() .. "\\lua_dll_x64_name.dll"package.loadlib(path, "luaopen_lua_dll_x64_name")()
function main()
message(lua_dll_x64_name.TestFunc())
end
6)И квик сразу же выдает ошибку:
Код
...Lua_script.lua.txt:2: attempt to call a nil value