Tag: lua table

推Lua表

我在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 ]

我是否正确地从C函数中读取嵌套的lua表作为参数?

我将用C语言实现一个函数,它将由Lua脚本调用。 这个函数应该接收一个lua表(甚至包含一个数组)作为参数,所以我应该读取表中的字段。我试着像下面这样做,但是当我运行它时我的函数崩溃了。 任何人都可以帮助我找到问题吗? /* function findImage(options) imagePath = options.imagePath fuzzy = options.fuzzy ignoreColors = options.ignoreColor; … end Call Example: findImage { imagePath=”/var/image.png”, fuzzy=0.5, ignoreColors={ 0xffffff, 0x0000ff, 0x2b2b2b } } */ static int findImgProxy(lua_State *L) { lua_settop(L, 1); luaL_checktype(L, 1, LUA_TTABLE); lua_getfield(L, -1, “imagePath”); lua_getfield(L, -2, “fuzzy”); lua_getfield(L, -3, “ignoreColors”); const char *imagePath = luaL_checkstring(L, -3); […]

在C中获取Lua表大小

如何在C中获得Lua表的大小? static int lstage_build_polling_table (lua_State * L) { lua_settop(L, 1); luaL_checktype(L, 1, LUA_TTABLE); lua_objlen(L,1); int len = lua_tointeger(L,1); printf(“%d\n”,len); … } 我的Lua代码: local stages = {} stages[1] = stage1 stages[2] = stage2 stages[3] = stage3 lstage.buildpollingtable(stages) 它总是打印0。 我究竟做错了什么?

使用Lua C API迭代表的表

我正在尝试迭代Lua中的表格并输出: 每个表的关键。 每个表中每个条目的键/值对。 这是代码: void print_table(lua_State *L) { lua_pushnil(L); while(lua_next(L, -2) != 0) { const char *key = lua_tostring(L, -2); if(lua_isstring(L, -1)) printf(“%s = %s”, key, lua_tostring(L, -1)); else if(lua_isnumber(L, -1)) printf(“%s = %d”, key, lua_tonumber(L, -1)); else if(lua_istable(L, -1)) { printf(“%s”, key); PrintTable(L); } lua_pop(L, 1); } } } 这是我正在尝试输出的一个表的示例: s = { p […]

如何使用作为参数传递给lua C函数的表?

我将用C语言实现一个函数,它将由Lua脚本调用。 这个函数应该接收一个lua表作为参数,所以我应该读取表中的字段。我试着像下面这样做,但是当我运行它时我的函数崩溃了。 任何人都可以帮助我找到问题吗? /* function findImage(options) imagePath = options.imagePath fuzzy = options.fuzzy ignoreColor = options.ignoreColor; end Call Example: findImage {imagePath=”/var/image.png”, fuzzy=0.5, ignoreColor=0xffffff} */ // implement the function by C language static int findImgProxy(lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); lua_getfield(L, -1, “imagePath”); if (!lua_isstring(L, -1)) { error(); } const char * imagePath = lua_tostring(L, -2); lua_pop(L, […]

在lua和C之间共享数组

我真的用Google搜索了这个问题,但我从未真正得到过解决方案。 我想在C和Lua之间共享一个数组,为了提高性能,我将避免将数组复制到Lua和从Lua复制数组。 所以我想传递一个指向数组的指针从C到Lua。 然后从Lua我想直接在这个数组中设置/修改值。 C代码中的示例 我想定义我的数组 int mydata[] = {1,2,3,4} 将其设置为全局以从Lua访问它,名称为mydata 。 在Lua 我想改变这样的值 mydata[3] = 9 当我返回C时, mydata[3]为9,因为它是指向数组的指针。 这怎么可能?

通过Lua表迭代

我试图迭代lua表但我不断收到此错误: invalid key to ‘next’ 我知道索引从-8开始,我知道那里有一个表,因为它获得了第一个(也是唯一的)值。 但是,它会尝试再次循环,即使我知道表中只有一个字符串。 if (lua_istable(L, index)) { lua_pushnil(L); // This is needed for it to even get the first value index–; while (lua_next(L, index) != 0) { const char *item = luaL_checkstring(L, -1); lua_pop(L, 1); printf(“%s\n”, item); } } else { luaL_typerror(L, index, “string table”); } 任何帮助,将不胜感激。 当我使用正索引时(只要我不从中删除1),这可以正常工作 编辑:我注意到如果我单独留下项目的值,我就不会收到此错误。 只有当我开始读取item的值时才会出现此错误。 当我从表中获得值时,我调用另一个Lua函数,这可能会破坏lua_next吗?