Вероятная проблема заключается в том, что luaL_loadfile()
задокументировано для возврата тех же значений, что и lua_load()
или одного дополнительного кода ошибки. В любом случае возвращаемое значение - int
, где 0 означает успех, а ненулевое значение - код ошибки.
Итак, тест luaL_loadfile(...) == NULL
равен true , если файл был загружен, но код вызывает это как ошибку и возвращает.
Функция lua_pcall()
также возвращает код состояния, и вы можете также проверить это.
В противном случае сценарий, как показано, действительно создает глобальную переменную, и lua_getglobal()
будет извлекать ее в стек, где его можно протестировать с помощью lua_isstring()
, или, возможно, с большей пользой позволит вернуть его значение, если оно достаточно строковое как с lua_tostring()
. Последняя функция вернет либо const char *
, указывающее на строку с нулевым символом в конце, либо NULL, если значение индекса стека не может быть преобразовано в строку. Обратитесь к справочному руководству по Lua со ссылками на остальные детали и предостережение об использовании lua_tostring()
внутри цикла.
Редактировать: Я добавил лучшие ссылки на руководство в нескольких местах.