推Lua表

时间:2010-10-21 13:19:21

标签: c++ c lua stack lua-table

我在 C 中创建了一个Lua表,但我不知道如何将该表推到堆栈的顶部,这样我就可以将它传递给Lua函数。

有谁知道怎么做?

这是我目前的代码:

lua_createtable(state, libraries.size(), 0);
int table_index = lua_gettop(state);
for (int i = 0; i < libraries.size(); i++)
{
    lua_pushstring(state, libraries[i].c_str());
    lua_rawseti(state, table_index, i + 1);
}

lua_settable(state, -3);

[ Push other things ]
[ Call function ]

3 个答案:

答案 0 :(得分:9)

这是一个将字符串推送到表格的快速帮助函数

void l_pushtablestring(lua_State* L , char* key , char* value) {
    lua_pushstring(L, key);
    lua_pushstring(L, value);
    lua_settable(L, -3);
} 

这里我使用辅助函数来创建表并将其传递给函数

// create a lua function
luaL_loadstring(L, "function fullName(t) print(t.fname,t.lname) end");
lua_pcall(L, 0, 0, 0);

// push the function to the stack
lua_getglobal(L, "fullName");

// create a table in c (it will be at the top of the stack)
lua_newtable(L);
l_pushtablestring(L, "fname", "john");
l_pushtablestring(L, "lname", "stewart");

// call the function with one argument
lua_pcall(L, 1, 0, 0);

答案 1 :(得分:1)

该表已经在堆栈中,lua_newtable离开了它,不是吗?

答案 2 :(得分:1)

我制作了一个小片段开源,解决了将简单的Lua字典表从C推送到Lua。

你可以查看here,应该运作良好。