我正在努力寻找和理解如何将表从lua传递到c ++
我有什么:
Lua档案:
-- lua script for sending table data
io.write("lua table to send")
tableexample = {x = 1, y = 2, z = 100}
return tableexample
c / c ++ side
L = lua_open();
luaL_openfile(L, "luafile");
... call the function...
luaLdofile(L, luafile);
int result;
result = lua_pcall(L,0, LUA_MULTRET,0);
if(result){
fprintf(stderr, "failed %s\n", lua_tostring(L,-1));
if(lua_istable(L,-1)){
lua_gettable(L,-1);
x = lua_tonumber(L,-2);
y = lua_tonumber(L,-3);
z = lua_tonumber(L,-4);
}
else
printf("fail");
结果返回时失败“尝试调用表值”
我看了很多不同的教程/示例,但没有找到一个简单的教程,没有其他100件事情发生,让我感到困惑
一些类似的引用 - 但对于我正在寻找的内容来说太复杂了 Iterating through a Lua table from C++?
答案 0 :(得分:4)
您使用lua_gettable
是错误的。
查看Lua manual:
void lua_gettable (lua_State *L, int index);
将值
t[k]
推入堆栈,其中t
是值 给定索引,k
是堆栈顶部的值。此函数从堆栈中弹出键(放置结果值 在它的位置)。
在您的示例中,堆栈顶部的值是表本身,因此您执行的操作相当于tableexample[tableexample]
查找。
实现目标的最短路径是使用lua_getfield
代替,它允许通过字符串键访问表元素:
lua_getfield(L, -1, "x");
或者,首先在堆栈上推送string类型的Lua值,然后使用lua_gettable
进行查找。
lua_pushliteral(L, "x");
lua_gettable(L, -2);
不要忘记保持堆叠平衡。您在堆栈上推送的每个值都需要正确弹出。 Lua手册指定了每个API调用如何通过\[ \]
brackets on the right side of each function name中的数字更改堆栈。