2010-10-21 17 views
5

He creado una tabla Lua en C, pero no estoy seguro de cómo colocar esa tabla en la parte superior de una pila para poder pasarla a una función Lua.Empujando una tabla Lua

¿Alguien sabe cómo hacer esto?

Este es mi código actual:

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 ] 

Respuesta

7

Aquí es una función de ayuda rápida para empujar cuerdas a la mesa

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

Aquí, he utilizado la función de ayuda para crear la tabla y pasarlo a una función

// 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

¿Cómo presionaría dos tablas diferentes para la misma función? –

+0

El segundo argumento en lua_pcall es el número de argumentos que se pasan a la función, por lo que empujaría ambas tablas en la pila y luego cambiaría la llamada a lua_pcall (L, 2, 0, 0); –

1

La mesa ya está en la pila, donde lua_newtable dejado, ¿verdad?

+0

Si es así, debo estar haciendo la tabla incorrectamente. ¿Podría decirme cómo debería estar creando la mesa? Todo lo que necesita contener es algunas cadenas. –

+1

Vea http://www.lua.org/source/5.1/lua.c.html#getargs por ejemplo. O muéstranos tu código – lhf

1

hice un pequeño fragmento código abierto que resuelve el empuje de tablas de diccionarios Lua simples de C a Lua.

Puede verificarlo here, debería funcionar bien.

Cuestiones relacionadas