使用 Lua 从 C++ 调用失败,打开标准库得到 Nil 错误

我正在将 Lua 集成到游戏项目中,令人沮丧的是,每当我尝试使用 lua_pcall 时,我都会收到“尝试调用空值”的错误。

当我尝试查找错误时,大多数示例都是人们忘记在加载他们的 Lua 文件后使用 pcall,或者在后续步骤中出现了一些错误。但对我来说,即使我尝试加载 Lua 的标准库,也会立即出现问题。我不明白为什么会出现这么少的代码出错了。我尝试过的其他方法是跳过 openLibs 直接使用 doFile 加载我的文件,但即使是在这种情况下,我所做的任何事情都会导致空值错误。

非常感谢任何帮助。

编辑:

在得到一些帮助后,我确定无需使用 pcall 即可进行 luaL_openlibs,但正如我上面写的那样,尝试运行任何函数都会导致错误。在这种情况下,它无法在全局 Lua 命名空间中找到“init”

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())) // 下面是脚本
    {
        const char* errStr = lua_tostring(m_luaState.get(), -1);
        ASSERT(false, errStr ); // 不会进入这种情况
    }

    lua_getglobal(m_luaState.get(), "init");
    if (!lua_isfunction(m_luaState.get(), -1))
    {
        ASSERT(false); // 进入这种情况!为什么我们找不到"init"?
    }
}

Lua

init function ()

end

update function (dt)

end

它当然还没有做什么,但我希望至少能够找到该函数。

点赞
用户796241
用户796241
Hilariously the issue was in my FileReader code, there was an omitted newline character

滑稽地,问题出现在我的 FileReader 代码中,缺少了一个换行符。

2019-05-02 03:59:25