将表传递给c / c ++的简单lua示例

时间:2014-05-02 13:19:45

标签: c++ c lua lua-table

我正在努力寻找和理解如何将表从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++?

1 个答案:

答案 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中的数字更改堆栈。