Я пишу интеграцию Lua в игровой проект, и, к сожалению, каждый раз, когда я пытаюсь использовать lua_pcall, я получаю сообщение об ошибке «пытаюсь вызвать значение nil».
Когда я пытаюсь найти ошибку, большинство примеров - это люди, которые забыли использовать pcall после загрузки своего файла lua или какой-то ошибки в дальнейшем. Но для меня это как только я пытаюсь загрузить стандартные библиотеки lua. Я не понимаю, что происходит с таким небольшим кодом, чтобы показать это. Другие вещи, которые я пробовал - пропустить openLibs и сразу перейти к загрузке моего файла с помощью doFile, но даже в этом случае все, что я сделаю, приведет к ошибке nil.
Любая помощь очень ценится.
EDIT:
Благодаря некоторой помощи я решил, что мне не нужно делать pcall для luaL_openlibs, но, как я писал выше, попытка запустить любую функцию при любых ошибках приводит к ошибкам. В этом случае он не может найти «init» в глобальном пространстве имен lua
C ++
void LuaScriptingInterface::init()
{
m_luaState = std::shared_ptr<lua_State>(luaL_newstate());
luaL_openlibs(m_luaState.get());
if (luaL_dostring(m_luaState.get(), m_script.c_str())) // script below
{
const char* errStr = lua_tostring(m_luaState.get(), -1);
ASSERT(false, errStr ); // not hitting this case
}
lua_getglobal(m_luaState.get(), "init");
if (!lua_isfunction(m_luaState.get(), -1))
{
ASSERT(false); // hit this case! Why can't we find "init"?
}
}
Lua
init function ()
end
update function (dt)
end
Конечно, он пока ничего не делает, но я ожидаю, что он, по крайней мере, сможет найти функцию.