2010-10-21 9 views
5

Ich habe eine Lua-Tabelle in C erstellt, aber ich bin mir nicht sicher, wie diese Tabelle auf die Spitze eines Stapels schieben, damit ich es an eine Lua-Funktion übergeben kann.Pushing eine Lua-Tabelle

Weiß jemand, wie man das macht?

Dies ist mein aktueller Code:

lua_createtable(state, libraries.size(), 0); 
int table_index = lua_gettop(state); 
for (int i = 0; i < libraries.size(); i++) 
{ 
    lua_pushstring(state, libraries[i].c_str()); 
    lua_rawseti(state, table_index, i + 1); 
} 

lua_settable(state, -3); 

[ Push other things ] 
[ Call function ] 

Antwort

7

Hier ist eine schnelle Hilfsfunktion Saiten auf den Tisch schieben

void l_pushtablestring(lua_State* L , char* key , char* value) { 
    lua_pushstring(L, key); 
    lua_pushstring(L, value); 
    lua_settable(L, -3); 
} 

Hier verwende ich die Hilfsfunktion die Tabelle erstellen und sie auf eine Funktion

// create a lua function 
luaL_loadstring(L, "function fullName(t) print(t.fname,t.lname) end"); 
lua_pcall(L, 0, 0, 0); 

// push the function to the stack 
lua_getglobal(L, "fullName"); 

// create a table in c (it will be at the top of the stack) 
lua_newtable(L); 
l_pushtablestring(L, "fname", "john"); 
l_pushtablestring(L, "lname", "stewart"); 

// call the function with one argument 
lua_pcall(L, 1, 0, 0); 
+0

Wie würde ich zwei verschiedene Tabellen auf die gleiche Funktion schieben? –

+0

Das zweite Argument in lua_pcall ist die Anzahl der Argumente, die an die Funktion übergeben werden, sodass Sie beide Tabellen auf den Stapel schieben und dann den pcall in lua_pcall (L, 2, 0, 0) ändern; –

1

Die Tabelle ist bereits in dem Stapel, wo lua_newtable es verließ, ist es nicht?

+0

Wenn es ist, muss ich die Tabelle falsch machen. Kannst du mir sagen, wie ich den Tisch erstellen soll? Alles, was es enthalten muss, sind einige Zeichenfolgen. –

+1

Siehe zum Beispiel http://www.lua.org/source/5.1/lua.c.html#getargs. Oder zeigen Sie uns Ihren Code. – lhf

1

Ich machte einen kleinen Schnipsel passieren Open Source, das einfache Lua-Dictionary-Tabellen von C nach Lua drückt.

Sie können es überprüfen here, sollte gut funktionieren.