Lua 5.4

Страницы: 1
RSS
Lua 5.4
 
Все таки есть проблемы в славном королевстве.

Есть библиотека для 5.3. Работает на ура. И в квике и в standalone

Пересобрал ее на 5.4. Работают все три десятка ее функций (и в квике и в standalone) без каких либо проблем, кроме одной. Она работает в standalone, но напрочь отказывется работать в квике.

Выкинул из нее все лишнее, оставил минимум для теста

Код
static int xx_test(lua_State *L)
{

   const char* buffer = luaL_checkstring(L, 1);

   if (luaL_loadbuffer(L, buffer, strlen(buffer), "test") == LUA_OK)
      MessageBox(0, "loadbuffer ok", "", MB_OK);
   else
   {
      MessageBox(0, "loadbuffer error", "", MB_OK);
   }
   
   if (lua_pcall(L, 0, 0, 0) == LUA_OK)
   {
      MessageBox(0, "pcall ok", "", MB_OK);
      lua_pushnil(L);
   }
   else
   {
      MessageBox(0, "pcall error", "", MB_OK);
   }



   return 1;
}
вызов из луа:
message("result=" .. tostring(xx.test("message('hello world!!',3)")))

И если в standalone мы получаем два сообщения OK, hello world и nil в качестве возврата, то в квике мы сразу получаем loadbuffer error и дальше, конечно мусор.


Может, кто то пальцем сможет указать направление в пустыне?
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Может, кто то пальцем сможет указать направление в пустыне?

Если ваш код Имя_dll.dll оформлен следующим образом (Имя_dll и Имя_пакета_dll это идинтификаторы в латинской кодировке):
Код
.........................

static int forLua_xx_test(lua_State* L)    //  Ваша функция ---
{

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

extern "C" LUALIB_API int luaopen_Имя_dll>(lua_State *L) {   // !!!  luaopen_<Имя пакета>
   lua_newtable(L);
   luaL_setfuncs(L, ls_lib, 0);
   lua_pushvalue(L, -1);
   lua_setglobal(L, "Имя_пакета_dll");  // !!!  lua_setglobal(L, "<Имя пакета>");
   return 0;
}
 


А вызов в QLua:
Код
require('Имя_dll')

message("result=" .. tostring(Имя_пакета_dll.xx_test("message('hello world!!',3)")))


То ваша функция forLua_xx_test  работает в 5.4 в QUIK 9.5.0.42
 
Конечно. Именно так все и оформлено. Функция то находится (как и все остальное все функции в этой dll) и запускается на выполнение. Проблема в том, что loadbuffer  выдает ошибку в какие и не выдает ее в стандартном интерпретаторе.

при этом прямая перекомпиляции без каких либо изменений в тексте в 5.3 даёт абсолютно рабочий вариант.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Проблема в том, что loadbuffer  выдает ошибку
 -----
Цитата
TGB написал:
То ваша функция forLua_xx_test  работает в 5.4 в QUIK 9.5.0.42
Это я проверил 15 минут назад.  Почему у вас не работает непонятно.
 
Вот так оно всегда. В cpath лишняя ссылка затесалась ))
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
TGB, спасибо за участие.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
Страницы: 1
Читают тему
Наверх