简单的Lua示例,将一个表格传递给C/C++。

我正在努力找到并理解如何将 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++ 侧:

L = lua_open();
luaL_openfile(L, "luafile");
... 调用函数 ...
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,这让我感到困惑。

一些类似的参考资料-但对我来说太复杂了:通过 C++ 迭代遍历 Lua 表?

点赞
用户577603
用户577603

你的 lua_gettable 的使用方法是错误的。

看一下[Lua手册] (http://www.lua.org/manual/5.2/manual.html#lua_gettable):

void lua_gettable(lua_State * L,int index);

将值 t [k] 推到堆栈上,其中 t 是给定索引处的值,而 k 是堆栈顶部的值。

该函数从堆栈中弹出键(将结果值放在其原位置)。

在你的例子中,堆栈顶部的值是表本身,所以你正在进行 tableexample [tableexample] 查找的等效操作。

实现你想要的最短的方法是使用 [lua_getfield] (http://www.lua.org/manual/5.2/manual.html#lua_getfield) ,它允许通过字符串键访问表元素:

lua_getfield(L,-1,“x”);

或者,先将类型为字符串的Lua值推到堆栈上,然后使用lua_gettable进行查找。

lua_pushliteral(L,“x”);
lua_gettable(L,-2);

不要忘记保持堆栈平衡。您在堆栈上推送的每个值都需要正确弹出。Lua手册指定每个API调用通过每个函数名称右侧[[]] 中的数字更改堆栈(http://www.lua.org/manual/5.2/manual.html#4.8)。

2014-05-02 13:31:22