如何从C函数返回一个数组表给Lua?

我需要实现一个 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}}
}
点赞
用户107090
用户107090

尝试使用lua_rawseti(L,-2,i+1)来替换lua_settable(L,-3)

2013-08-28 11:48:06
用户2279620
用户2279620

需要根据 @lhf 的建议更改 lua_settable。 此外,您始终在子表的前两个索引中添加。

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;   // 我想返回一个类似于:{{11, 12}, {21, 22}, {31, 32}} 的 Lua 表
}
2013-08-28 12:16:35