我知道与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调用?
最佳答案 在尝试获取Func2之前需要调用Func1,因为Func2来自Func1返回的表(而不是来自全局表).
然后你需要调用Func2并在返回值中查找Table1等.
你得到什么“堆栈泄漏”投诉?如果你直接从C调用这个函数然后是,你需要确保你在返回之前从lua堆栈中弹出任何你放在lua堆栈上的东西(不是由调用者消费等).