quik 8.5 ошибка

Страницы: Пред. 1 2 3
RSS
quik 8.5 ошибка
 
Спасибо.
Не понял что не так было в настройках проекта, создавал новый, настраивал вроде все как обычно, но не пошло.
Открыл проект, что создавал под QUIK 8 и изменил его как Вы написали, все собралось, тестовая функция вызвана из QUIK 8.5 и успешно выполнена, с остальными буду постепенно разбираться. Еще раз спасибо.
 
Цитата
quio написал:
Не пойму, мне код что ли нужно с раскрытым макросом привести?
Добрый день,
     
      Описанная в данном инциденте ошибка была исправлена в версии 8.5.2       терминала QUIK.
      Рекомендуем вам обновить версию программы.
     
      Приносим извинения за причиненные неудобства.
 
Цитата
rst9 написал:
воспроизвести можно так:
1. создаем dll, в ней линкуемся с lua53.dll.
2. в luaopen_... создаем новый инстанс lua vm при помощи luaL_newstate()
3. инициализируем его при помощи luaL_openlibs()
получаем исключение "multiple Lua VMs detected. Expected 5.3 instead of 0.0"

что-то вы там не доделали, исправьте, пожалуйста. спасибо.
Добрый день,
     
      Описанная в данном инциденте ошибка была исправлена в версии 8.5.2       терминала QUIK.
      Рекомендуем вам обновить версию программы.
     
      Приносим извинения за причиненные неудобства.
 
Цитата
rst9 написал:
воспроизвести можно так:
1. создаем dll, в ней линкуемся с lua53.dll.
2. в luaopen_... создаем новый инстанс lua vm при помощи luaL_newstate()
3. инициализируем его при помощи luaL_openlibs()
получаем исключение "multiple Lua VMs detected. Expected 5.3 instead of 0.0"

что-то вы там не доделали, исправьте, пожалуйста. спасибо.
Добрый день,
     
      Описанная в данном инциденте ошибка была исправлена в версии 8.5.2       терминала QUIK.
      Рекомендуем вам обновить версию программы.
     
      Приносим извинения за причиненные неудобства.
 
Добрый день.

Т.к. теперь lua 5.3, то многих может расстроить работа функции table.(s)insert.

В lua 5.3 появилась провкерка границ при вставке элементов. Поэтому у многих сломается ранее работающий код, кода вставка была за границей последнего элемента. Для примера, вставка в таблицу по номеру транзакции и т.п.

В lua 5.3 функция:

79 static int tinsert (lua_State *L) {
80   lua_Integer e = aux_getn(L, 1, TAB_RW) + 1;  /* first empty element */
81   lua_Integer pos;  /* where to insert new element */
82   switch (lua_gettop(L)) {
83     case 2: {  /* called with only 2 arguments */
84       pos = e;  /* insert new element at the end */
85       break;
86     }
87     case 3: {
88       lua_Integer i;
89       pos = luaL_checkinteger(L, 2);  /* 2nd argument is the position */
90       luaL_argcheck(L, 1 <= pos && pos <= e, 2, "position out of bounds");
91       for (i = e; i > pos; i--) {  /* move up elements */
92         lua_geti(L, 1, i - 1);
93         lua_seti(L, 1, i);  /* t[i] = t[i - 1] */
94       }
95       break;
96     }
97     default: {
98       return luaL_error(L, "wrong number of arguments to 'insert'");
99     }
100   }
101   lua_seti(L, 1, pos);  /* t[pos] = v */
102   return 0;
103 }

В lua 5.1:

90 static int tinsert (lua_State *L) {
91   int e = aux_getn(L, 1) + 1;  /* first empty element */
92   int pos;  /* where to insert new element */
93   switch (lua_gettop(L)) {
94     case 2: {  /* called with only 2 arguments */
95       pos = e;  /* insert new element at the end */
96       break;
97     }
98     case 3: {
99       int i;
100       pos = luaL_checkint(L, 2);  /* 2nd argument is the position */
101       if (pos > e) e = pos;  /* `grow' array if necessary */
102       for (i = e; i > pos; i--) {  /* move up elements */
103         lua_rawgeti(L, 1, i-1);
104         lua_rawseti(L, 1, i);  /* t[i] = t[i-1] */
105       }
106       break;
107     }
108     default: {
109       return luaL_error(L, "wrong number of arguments to " LUA_QL("insert"));
110     }
111   }
112   luaL_setn(L, 1, e);  /* new size */
113   lua_rawseti(L, 1, pos);  /* t[pos] = v */
114   return 0;
115 }

Видно, что в lua 5.1 есть строка:
101       if (pos > e) e = pos;  /* `grow' array if necessary */

Рассмотрите возможность реализации схожего поведения table.insert. Или хотя бы вашей table.sinsert. Сейчас же такая вставка дает ошибку "position out of bounds":
90       luaL_argcheck(L, 1 <= pos && pos <= e, 2, "position out of bounds");
 
Nikolay,
Да создатели Lua изменили логику в этом месте, имеют полное право.
Значит они посчитали что так будет лучше.
Понятно что неудобно и придется переделать логику в коде.
Однако в обновлении Lua до 5.3 это далеко не единственное изменение.
К сожалению мы никак не можем переделать Lua 5.3 под полную совместимость с Lua 5.1
Страницы: Пред. 1 2 3
Читают тему
Наверх