2009-02-19 2 views
1

как проверить значение вершины стека в Lua?Проверка значения элемента стека Lua из C++

Я следующий C++ код:

if (luaL_loadfile(L, filename) == NULL) { 
     return 0;// error.. 
    } 

    lua_pcall(L,0,0,0); // execute the current script.. 

    lua_getglobal(L,"variable"); 

    if (!lua_isstring(L,-1)){ // fails this check.. 
     lua_pop(L,1); 
     return 0; // error 
} 

Содержимое файла в вопросе

-- A comment 
variable = "MyString" 

Любые идеи?

ответ

2

Вероятная проблема заключается в том, что зарегистрировано luaL_loadfile(), чтобы вернуть те же значения, что и lua_load(), или еще один код ошибки. В любом случае возвращаемое значение равно int, где 0 означает успех, а ненулевое значение - код ошибки.

Итак, тест luaL_loadfile(...) == NULL равен true, если файл был загружен, но код вызывает ошибку и возвращается.

Функция lua_pcall() также возвращает код состояния, и вы также можете проверить это.

В противном случае, скрипт, как показано действительно создает глобальную переменную, и lua_getglobal() бы получить, что в стек, где она может быть проверена с lua_isstring(), или, возможно, более полезно позволить вам вернуть его значение, если оно достаточно нитевидные с lua_tostring() , Последняя функция вернет либо const char *, указывая на строку с нулевым завершением, либо NULL, если значение в индексе стека не может быть преобразовано в строку. См. Справочное руководство Lua как связанное с остальными деталями и предостережение об использовании lua_tostring() внутри цикла.

Редактировать: Я добавил лучшие ссылки на руководство в нескольких местах.

+0

Пойдет по этой тропе и обновит вас по результату, спасибо! : D – krebstar

+0

Ну, похоже, вы были на правильном пути .. luaL_loadfile возвращает 6 .. Что это значит? Где я могу найти список кодов ошибок для этого? Спасибо .. – krebstar

+0

nvm, понял это, спасибо вам :) Я пропустил неправильное имя файла и не смог его открыть .. Нужно полное имя пути .. – krebstar

0

Я думаю, вы хотите заменить luaL_loadfile lua_dofile. lua_pcall не требуется. Мое предположение заключается в загрузке файла как функции с использованием luaL_loadfile, а затем его запуск с использованием pcall может не создавать нужные вам глобальные переменные.

+0

Нет, lua_dofile загружает файл и запускает его. Я хочу делать их отдельно. Я использую loadfile и pcall неправильно? – krebstar

Смежные вопросы