Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Chainik228
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 46
Завершенные тесты: 1
#1

Runtime error при открытии lua-скрипта - C++

01.08.2016, 12:32. Просмотров 258. Ответов 4
Метки нет (Все метки)

Всем доброго времени суток.

Есть функция, задача которой прочитать lua-скрипт и перенести значения параметров из него в структуру.

Кликните здесь для просмотра всего текста

Код немного условный, потому что инициализация, подключение библиотек и деинициализация script_LuaState вынесены в отдельные функции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
script_LuaState = luaL_newstate();
luaL_openlibs(script_LuaState);
 
std::string file = system_GetDirectory(DIRECTORY_USERROOT) + "settings";
int top  = lua_gettop(script_LuaState);
    
if (luaL_dofile(script_LuaState, file.c_str()))
{
    logging_PrintError("settings parse error (%d|%d).", luaL_loadfile(script_LuaState, file.c_str()), lua_pcall(script_LuaState, 0, LUA_MULTRET, 0));
    return;
}
 
lua_getglobal(script_LuaState, "main");
    
lua_getfield(script_LuaState, -1, "firstrun");
engine_MainSettings.FirstRun = lua_tonumber(script_LuaState, -1)
                                   ? true : false;
lua_pop(script_LuaState, 1);
    
lua_settop(script_LuaState, top);
 
lua_close(script_LuaState);


При отладке, функция выполняет условие с luaL_dofile (...), потому что lua_pcall (...) возвращает 2 (runtime error). Я так и не смог понять почему происходит ошибка со средой, но мне кажется, что я забыл что-то проделать со script_LuaState при инициализации.

ОС: Debian. Версия Lua: 5.3.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2016, 12:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Runtime error при открытии lua-скрипта (C++):

Фото при открытии крышки ноутбука - C++
Можно ли написать программу, чтобы при открытии крышки ноутбука допустим через 2 секунды ноут делал фото, но без вспышки(скрытно). И...

Скачал исходник, при открытии проекта выдается сообщение:Error Reading Form - C++ Builder
Скачал искодник пректа, но при при открытии выдает сообщения об ошибке. Подскажите пожалуйста как исправить. Может быть у меня не...

Что за ошибки Exception и Runtime error - C++ Builder

Ошибка при отключении Build with runtime packages - C++ Builder
Создал проект. При запуске с Build with runtime packages флажок установлен все прекрасно работает. Программа отправляет писмо по smtp...

Сообщение при компиляции "Error: Could not create Release_Build_ru\MT_1000A_ML.str (error code -1)" - C++ Builder
Добрый вечер. Подскажите - вдруг при компиляции в конце стали появляться три ошибки Error: Could not create...

Ошибка при открытии формы - C++ Builder
Добрый день. После бессонной ночи раздумий, сдался. в общем проблема такова. При взаимодействии с Form1 или её компонентами, из Form4,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
01.08.2016, 14:48 #2
Сначала написал было:
"А в самом settings ошибки-то нет? Он компилируется и выполняется standalone-интерпретатором Lua?"
А потом заметил, что загрузка файла и вызов происходят среди аргументов функции, порядок вычисления которых не определён (но обычно справа налево).
0
Chainik228
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 46
Завершенные тесты: 1
01.08.2016, 15:01  [ТС] #3
То есть, необходимо изменить порядок вычисления?
Честно, я ориентировался по руководствам с сайта.
0
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
01.08.2016, 15:32 #4
Цитата Сообщение от Chainik228 Посмотреть сообщение
То есть, необходимо изменить порядок вычисления?
То есть, операции, которые следует выполнять в определённом порядке, не должны быть аргументами функции. Надо сначала вычислить и запомнить результаты, затем вывести. К тому же, если loadfile вернёт ошибку, pcall всё равно уже нечего будет вызывать.

Но это соображение не отменяет предыдущей мысли о проверке settings в интерпретаторе.
0
Chainik228
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 46
Завершенные тесты: 1
01.08.2016, 17:10  [ТС] #5
Попробовал в интерпретаторе. Проблема именно с файлом "settings".

Пошел читать руководство по скриптам.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2016, 17:10
Привет! Вот еще темы с ответами:

Получить путь к файлу при открытии - C++ Builder
Здравствуйте. Мне необходимо создать программу (текстовый редактор), которая бы использовала свой тип файлов. При открытии подобного файла...

Вызов функции при открытии формы - C++ Builder
Собственно вопрос: Есть главная форма(форма1) с кнопкой, которая открывает другую форму(форма2). Как при открытии формы2 вызвать функцию?...

Обработка исключения при открытии файла - C++ Builder
Работаю с файлом, у меня есть функция, в которой файл открывается и в ней же закрывается. Например, void ReadFromFile(const char*...

Runtime error 216 at 0067F45E при открытии второго окна программы (exe, rad studio) - Удаление вирусов
Runtime error 216 at 0067F45E при открытии второго окна программы (exe, rad studio) Недавно переустанавливал систему. Форматировал только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.08.2016, 17:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru