Создание и вызов DLL из QLua - прошу помощи

Страницы: 1
RSS
Создание и вызов DLL из QLua - прошу помощи
 
Создание и вызов DLL из QLua - прошу пожалуйста помощи.

Второй день мучаюсь, ну ничего не получается, точнее получается, но только - Ошибки.

Вот по шагам я делаю так:

0)Скачиваю скомпилированные файлы Lua: lua-5.4.2_Win64_bin  -  https://sourceforge.net/projects/luabinaries/
1)Создаю проект в Visual Studio.
2)Создаю файл .cpp и копирую туда следующий код:
Код
#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

Ну что не так то ?? ((((((
 
Версия квик - 8.7.13
 
Цитата
Serg_ написал:
Версия квик - 8.7.13
гадать не видя весь код бессмысленно.
Сообщение говорит, что функции нет.
еще раз скажу, отлаживайте свою функцию без квик.
Научитесь сначала писать dll для луа.
Полагаю Вы знаете как отладить софт.
 
Цитата
nikolz написал:
Цитата
Serg_ написал:
Версия квик - 8.7.13
гадать не видя весь код бессмысленно.
Сообщение говорит, что функции нет.
еще раз скажу, отлаживайте свою функцию без квик.
Научитесь сначала писать dll для луа.
Полагаю Вы знаете как отладить софт.
Это и есть ВЕСЬ код.
 
Почему у вас 5.4 в программе?
8.7 - это 5.3
 
надо собирать 5.3 и пример я Вам дал для 5.3
и ссылку на документацию на 5.3
 
и библиотека должна быть lua53.lib
 
и lua 5.3 bin должна быть
 
Цитата
nikolz написал:
Почему у вас 5.4 в программе?
8.7 - это 5.3
У меня в папке с квиком - есть файл lua54.dll
 
Цитата
nikolz написал:
надо собирать 5.3 и пример я Вам дал для 5.3
и ссылку на документацию на 5.3
Собсвенно для 5.3.5 - я тоже собирал - ошибка точно такая же.
 
Цитата
Serg_ написал:
Цитата
nikolz написал:
надо собирать 5.3 и пример я Вам дал для 5.3
и ссылку на документацию на 5.3
Собсвенно для 5.3.5 - я тоже собирал - ошибка точно такая же.
Я вам все написал как делать.
Вы собираетесь делать или рассуждать?
если у вас 8.7 то все должно быть 5.3
-------------------
анекдот:
Мадам, там кирпич и обрыв,туда нельзя.
Но Вам можно.
 
Цитата
nikolz написал:
Цитата
Serg_ написал:
 
Цитата
nikolz  написал:
надо собирать 5.3 и пример я Вам дал для 5.3
и ссылку на документацию на 5.3
 Собсвенно для 5.3.5 - я тоже собирал - ошибка точно такая же.
Я вам все написал как делать.
Вы собираетесь делать или рассуждать?
если у вас 8.7 то все должно быть 5.3
-------------------
Но, где я сделал не так, как Вы сказали ??? :(
Или Вы имеете ввиду, что версия Lua должна быть именно 5.3, а не какие то там 5.3.5 ?
 
вот вам пример кода из sorce 5.3

/* }====================================================== */


static const luaL_Reg tab_funcs[] = {
 {"concat", tconcat},
 {"insert", tinsert},
 {"pack", tpack},
 {"unpack", tunpack},
 {"remove", tremove},
 {"move", tmove},
 {"sort", sort},
 {NULL, NULL}
};


LUAMOD_API int luaopen_table (lua_State *L) {
 luaL_newlib(L, tab_funcs);
 return 1;
}
 
любая библиотека 5.3.x
 
пардон выше пример из 5.4
---------------
а это из 5.3

static const luaL_Reg tab_funcs[] = {
 {"concat", tconcat},
#if defined(LUA_COMPAT_MAXN)
 {"maxn", maxn},
#endif
 {"insert", tinsert},
 {"pack", pack},
 {"unpack", unpack},
 {"remove", tremove},
 {"move", tmove},
 {"sort", sort},
 {NULL, NULL}
};


LUAMOD_API int luaopen_table (lua_State *L) {
 luaL_newlib(L, tab_funcs);
#if defined(LUA_COMPAT_UNPACK)
 /* _G.unpack = table.unpack */
 lua_getfield(L, -1, "unpack");
 lua_setglobal(L, "unpack");
#endif
 return 1;
}
 
это пример из моей dll



extern luaL_Reg atom[];
extern luaL_Reg filt[];

luaL_Reg array[] = {
{"cr",create},{"rd",read}, {"wr",write},{"start",start},{"stop",stop},{NULL, NULL}
};

LUAW32_API int luaopen_nkarray( lua_State *L) {
luaL_newlib(L,array);
lua_setglobal(L, "nkarray");
luaL_newlib(L,atom);
lua_setglobal(L, "nkatom");
luaL_newlib(L,filt);
lua_setglobal(L, "nkdsp");
return 1;
}
 
Разобрались.
Были "неудачные" lib-файлы.
 
На правах эмоций завершаю данную тему:

Разрабы квика криворукие тв*ри позорные ... б%ть!!!!

Я делал это на версии 8.7.13 - только что обновил до 9.4.2.1 - все заработало.

nikolz - Спасибо и Вам за помощь!

 
Цитата
Serg_ написал:
Разрабы квика криворукие тв*ри позорные ... б%ть!!!!
Добрый день.

И Вам всего наилучшего.
Страницы: 1
Читают тему
Наверх