我知道与 lua 和 C 交互的基础知识,我目前正在尝试在 c++ 中执行以下 lua 行
Func1():Func2().Table1.value1
我正在尝试获取“value2”的值并在我的 C 程序中使用它。以下是我编写的尝试在 C 中获取此值的代码。
int GetNumber()
{
int retn = 0;
g_clientlua.lua_getfield(LUA_REGISTRYINDEX, "Player");
g_clientlua.lua_getfield(-1, "Func2");
g_clientlua.lua_getfield(LUA_GLOBALSINDEX, "Func1");
g_clientlua.lua_call(0, 1);
g_clientlua.lua_call(1, 1);
if (g_clientlua.lua_isnil(-1))
return retn;
g_clientlua.lua_getfield(-1, "Table1");
if (g_clientlua.lua_isnil(-1))
return retn;
g_clientlua.lua_getfield(-1, "value1");
if (g_clientlua.lua_isnil(-1))
return retn;
retn = (int)g_clientlua.lua_tointeger(-1);
}
clientlua 是一个对象,它基本上只允许我调用一个方法,该方法调用它的 lua_* 等效函数,并用一个成员变量填充 lua_state 指针参数,该成员变量是指向 lua 状态的指针。
每次我调用它时,它都会抱怨我导致 lua 堆栈泄漏。为了解决这个问题,我尝试lua_pop(3)
在末尾添加一个,但它只是让我的程序崩溃而没有报告错误,所以我认为我做错了什么。
有人对我有什么智慧的话吗?有点迷失在这里。我怀疑上面的代码是否正确编写,我将如何用 C 编写上面的 lua 调用?