我知道如何与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);
}
客户端lua是一个对象,可以让我调用一个方法,该方法调用它的lua_*函数等价物,并将指向lua状态的成员变量指针参数填充到lua_state指针参数中。但每次调用时都会报告我导致了lua堆栈泄漏。为解决这个问题,我尝试在末尾添加了一个
lua_pop(3)
,但结果程序崩溃且没有报错,因此我认为自己做错了什么。有人能给我一些建议吗?我有点迷茫。我怀疑上述代码甚至没有正确编写,那么我应该如何在C语言中编写上述lua调用呢?