如何从C函数将数组作为表返回给Lua?

8
我需要实现一个C函数,以便Lua脚本调用。我希望从该函数返回一个作为表的数组。我尝试使用下面的代码,但是程序崩溃了。请问有人知道如何使用它吗?

struct Point {
    int x, y;
}
typedef Point Point;
static int returnImageProxy(lua_State *L) { Point points[3] = {{11, 12}, {21, 22}, {31, 32}};
lua_newtable(L);
for (int i = 0; i 3; i++) { lua_newtable(L); lua_pushnumber(L, points[i].x); lua_rawseti(L, -2, 2*i+1); lua_pushnumber(L, points[i].y); lua_rawseti(L, -2, 2*i+2); lua_settable(L,-3); }
return 1; // 我想要返回一个像这样的Lua表:{{11, 12}, {21, 22}, {31, 32}} }
2个回答

9
需要更改lua_settable,正如@lhf所提到的。另外,您总是将其添加到子表的前两个索引中。
typedef struct Point {
    int x, y;
} Point;


static int returnImageProxy(lua_State *L)
{
    Point points[3] = {{11, 12}, {21, 22}, {31, 32}};

    lua_newtable(L);

    for (int i = 0; i < 3; i++) {
        lua_newtable(L);
        lua_pushnumber(L, points[i].x);
        lua_rawseti(L, -2, 1);
        lua_pushnumber(L, points[i].y);
        lua_rawseti(L, -2, 2);

        lua_rawseti(L, -2, i+1);
    }

    return 1;   // I want to return a Lua table like :{{11, 12}, {21, 22}, {31, 32}}
}

4
尝试将 lua_settable(L,-3) 替换为 lua_rawseti(L,-2,i+1)

你能解释一下这两者之间的区别吗? - Kaitain

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