2013-08-28 223 views
7

我需要一個用於調用lua腳本的C函數。我將從該函數返回一個數組作爲表。我使用代碼打擊但是崩潰了。有誰能告訴我如何使用它嗎?如何從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; // I want to return a Lua table like :{{11, 12}, {21, 22}, {31, 32}} 
} 
 

回答

8

需要更改lua_settable @lhf提到。此外,你總是加入到子表的前2個索引中

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,很好。 – lhf

4

嘗試用lua_rawseti(L,-2,i+1)代替lua_settable(L,-3)

+0

你能解釋這兩者之間的區別嗎? – Kaitain