Lua 5.3.5 connect Dll (Crash)

Страницы: 1
RSS
Lua 5.3.5 connect Dll (Crash)
 
Здравствуйте, в общем был на Lua 5.1 всё ок, работало, появилась нужда перейти на Quik 8.5.2.11  lua53.dll (lua 5.3)
Ну и в общем, при запуске Dll, она тут же: крашит Quik, загружает ЦП 100%, просто выдаёт ошибку. (Critical error ACCESS_VIOLATION in script)
Lib файл был собран 5.3.0
Код
static int forLua_TestFunc(lua_State* L)// Возвращает заданный текст
{


   //закоментил что бы проверить работу без него MainЕ();  // моя функция

   if (check == 1)
   {
      lua_pushstring(L, "1");

   }
   if (check == 2)
   {
      lua_pushstring(L, "2");
   }
   if (check == 0)
   {
      lua_pushstring(L, "0");
   }

      //lua_pushstring(L, "0");

    return(1);
}


//=== Регистрация реализованных в dll функций, чтобы они стали "видимы" для Lua ================================//
static struct luaL_Reg ls_lib[] = {
   { "TestFunc", forLua_TestFunc },
   { NULL, NULL }
};

//=== Регистрация названия библиотеки, видимого в скрипте Lua ==================================================//
extern "C" LUALIB_API int luaopen_HydraConnector(lua_State * L) {
   lua_newtable(L);
   luaL_setfuncs(L, ls_lib, 0);
   lua_setglobal(L, "MyConnector");
    return 0;
}
 
эмм... пересобрал ещё раз либу, и переименовал свои функции из static int в int и заработало -_-..... ну ок
 
подскажите только, почему у меня Память которую Lua жрёт, постоянно увеличивается? там сейчас только вызов Dll и Return
 
Цитата
Sergey написал:
переименовал свои функции из static int в int и заработало
Скорей всего компилятор решил, что функции не используются и выоптимизировал их оттуда.

Цитата
Sergey написал:
Память которую Lua жрёт, постоянно увеличивается
Так-то она увеличивается до примерно 100к, потом сборка мусора происходит. Это если ничего у вас не течет. Дьявол в деталях, может у вас загрузка длл и return в цикле или в колбеке.

Есть косячок, кстати, в вашей тестовой функции. Если ни один иф не прошел, вы ничего на стек не кладете и возвращаете таки 1. И, напротив, если вдруг каким-то образом не один иф прошел, вы положите на стек лишнего. Конкретно в данном случае это невозможно, а так вообще лучше else if всегда использовать, так сами себя не обманете.
 
Цитата
Sergey написал:
extern "C" LUALIB_API int luaopen_HydraConnector(lua_State * L)
Еще одно место, где сами себя обманули. Надо писать явно __declspec(dllexport), макросом LUALIB_API вы получили скорее всего __declspec(dllimport), т.к. вряд ли LUA_LIB определен. Поэтому компилятор статические функции и повыкинул, они действительно нигде не используются.
Страницы: 1
Читают тему
Наверх