使用全局 lua_State* 变量

我想在程序中使用一个全局 lua_State* 变量,通过 initLua() 函数进行初始化,并使用它来运行一些 Lua 函数。当我尝试时,Lua 代码根本不会运行。将来,我想使用 Lua 状态数组来实现多线程,其中每个线程都有自己的 Lua 状态。

当我在 main() 函数内部初始化 Lua 状态时,一切都正常。我正在运行 W10。

在 cfg.lua 中:

function teste()
    return 10;
end

在 C++ 中,用于设置全局状态变量 *L:

void initLua(lua_State *L) {
    L = luaL_newstate();
    luaL_openlibs(L);
    luaL_dofile(L, "./cfg.lua");
}

main() 中,int foo(L) 调用 Lua 中的 teste() 函数,并打印结果。

应该打印出 10,但在状态变量在 main() 之外被初始化时,什么也不会发生。

点赞
用户3574628
用户3574628

首先,我强烈建议将你的 Lua 状态保持为局部变量。如果你可以从参数中看到函数使用的 Lua 状态,那么阅读代码就会容易得多。

如果你真的需要将 Lua 状态设置为全局的,那么 initLua 就不应该有任何参数。你所遇到的问题是由于你将值赋给了参数 L 而不是一个全局变量。

即使你的 Lua 状态是局部变量,initLua 仍然不应该有参数。它可以只创建一个局部的 lua_State * 变量,并返回该变量。

2019-07-16 23:00:29