2013-08-28 11 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

これら2つの違いを説明できますか? – Kaitain

関連する問題