2014-10-29 21 views
6

Ich versuche, eine Lua-Tabelle zu meinem C-Programm zu übergeben, aber ich weiß nicht, wie es geht.Lua-Tabelle von C lesen

Mein Lua Code:

local stages = {} 
stages[1] = stage1 
stages[2] = stage2 
stages[3] = stage3 

lstage.buildpollingtable(stages) 

Meine C-Code:

static int lstage_build_polling_table (lua_State * L) {  
    luaL_checktype(L, 1, LUA_TTABLE); 

    lua_getfield(L, 1, "stage1"); 
    lua_getfield(L, 1, "stage2"); 
    lua_getfield(L, 1, "stage3"); 

    stage_t s1 = lstage_tostage(L, -3); 
    stage_t s2 = lstage_tostage(L, -2); 
    stage_t s3 = lstage_tostage(L, -1); 

    printf("%d\n",s1->priority); 
    printf("%d\n",s2->priority); 
    printf("%d\n",s3->priority); 

    return 1; 
} 

Was muss ich tun, alles über die Elemente zu laufen? Dieser Code generiert einen Fehler wie folgt:

bad argument #-3 to 'buildpollingtable' (lstage-Stage * expected, got table)

Kann jemand erklären, was mache ich falsch?

Antwort

4

Ihre Tabelle hat keine Felder mit dem Namen stage1 usw., nur die Felder 1, 2, 3. So versuchen

lua_rawgeti(L,1,1); 
lua_rawgeti(L,1,2); 
lua_rawgeti(L,1,3); 

statt

lua_getfield(L, 1, "stage1"); 
lua_getfield(L, 1, "stage2"); 
lua_getfield(L, 1, "stage3"); 
+0

Allerdings sollte die Fehlermeldung sein '..., bekam nil'. Vielleicht verwirrend ist die Verwendung von negativen Zahlen "lstage_tostage". – lhf

+0

Es gibt diesen Fehler zurück: "Warnung: Passing Argument 3 von 'lua_getfield' macht Zeiger aus Integer ohne Besetzung [standardmäßig aktiviert]" =/... danke für Sie Hilfe @lhf – Crasher

+1

@Crasher, haben Sie den Code mit verwendet 'lua_rawgeti'? – lhf