Приветствую. Работаю со скриптом LUA
и C++. Суть проблемы в том, что данные из Lua
скрипта не попадают в стек, или С++ неверно со стеком работает. Подробнее, вот скрипт работающий на LUA
машине :
require("QluaConnector");
is_run=true;
function main()
while is_run == true do
for i = 1, 3, 1 do
-- print(tostring(i)); -- такой вывод на экран срабатывает верно
QluaConnector.StartSendData(i); -- а этот уже нет
sleep(1000);
end;
end
end;
Единственное что мне нужно так это последовательно передавать в стек и читать из него три цифры : 1, 2, 3.
Код на С++ :
static int forLua_StartDataGet(lua_State *L)
{
while (true)
{
int value = lua_tonumber(L, 1);
lua_pop(L,-1);
Sleep(1000);
return(value );
}
}
В первый раз метод действительно возвращает 1, однако вместо 2 и 3 уже ноль. Если вместо lua_tonumber
посмотреть число элементов в стеке lua_gettop
то в 1 раз функция вернет 1 а во второй и дальнейшие по 0. Подозреваю, что ошибка или в скрипте или в С++, помогите разобраться.
В return
нужно возвращать не значение, а число значений, возвращаемых функцией. В Lua
функция может вернуть несколько значений. Само же возвращаемое значение, предварительно заносится в стек. Ну и lua_pop
тут вообще не нужен.
static int forLua_StartDataGet(lua_State *L)
{
int value = lua_tonumber(L, 1);
lua_pushinteger(L, value); // положить результат в стек
return 1; // говорим lua, что вернули одно значение на стеке
}
Если функция не должна ничего возвращать, то код становится ещё проще:
static int forLua_StartDataGet(lua_State *L)
{
int value = lua_tonumber(L, 1);
... // используем value
return 0; // говорим lua, что наша функция ничего не возвращает
}
Функция lua_pop
принимает на вход количество элементов, которые надо убрать со стека. Соответственно это число должно быть положительным.
lua_pop(L, 1);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый деньПоставил перед собой задачу написать маленький органайзер, отслеживающий как долго работают те или иные окна, сделал через отслеживание...
Для QPushButton задаю иконку с 3мя установленными картинками: Normal, Disabled, ActiveПосле сборки и запуска на linux, всё отрабатывает как ожидается - при наведении...
Первая итерация срабатывает превосходно, ввожу строку - получаю ответ, а второй раз как бы "зависает" - те