2013-08-28 36 views
7

Tôi cần impelement một chức năng C cho lua script to call.I sẽ trả về một mảng như bảng từ function.I sử dụng mã blow nhưng crashed.Could bất cứ ai cho tôi biết làm thế nào để sử dụng nó?Làm thế nào để trả về mảng như bảng từ hàm C sang 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; // I want to return a Lua table like :{{11, 12}, {21, 22}, {31, 32}} 
} 
 

Trả lời

8

Cần thay đổi lua_settable thành @lhf đề cập đến. Ngoài ra, bạn luôn thêm vào 2 chỉ mục đầu tiên của các bảng phụ

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}} 
} 
+0

+1, bắt tốt. – lhf

4

Thử thay thế lua_settable(L,-3) bằng lua_rawseti(L,-2,i+1).

+0

Bạn có thể giải thích sự khác biệt giữa hai bảng này không? – Kaitain

Các vấn đề liên quan