推送Lua表格

11
我在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个回答

11

这是一个快速的辅助函数,用于向表格中添加字符串

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);

我该如何将两个不同的表格推送到同一个函数中? - Tom Leese
lua_pcall中的第二个参数是传递给函数的参数数量,因此您需要将两个表格都推入堆栈,然后将pcall更改为lua_pcall(L,2,0,0); - Nick Van Brunt

2
表格已经在堆栈中了,就是在lua_newtable离开时留下的,是吗?

如果是这样,那么我一定在创建表格时做错了什么。你能告诉我应该如何创建表格吗?表格只需要包含一些字符串即可。 - Tom Leese
1
请参考 http://www.lua.org/source/5.1/lua.c.html#getargs。或者展示你的代码。 - lhf

1

我开源了一个小片段,可以解决从C语言向Lua推送简单的Lua字典表的问题。

你可以在这里查看,应该能够很好地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接