2013-03-05 19 views
5

Sono piuttosto nuovo a Lua. Ho cercato un codice di esempio per come chiamare una funzione Lua da C++, ma il codice di esempio usa 5.1 e sto cercando di farlo funzionare con 5.2.Chiamare la funzione Lua 5.2 da C++

Ecco il codice di esempio in questione con i miei commenti:

lua_State *luaState = luaL_newstate(); 
luaopen_io(luaState); 
luaL_loadfile(luaState, "myLuaScript.lua"); 
lua_pcall(luaState, 0, LUA_MULTRET, 0); 
//the code below needs to be rewritten i suppose 
lua_pushstring(luaState, "myLuaFunction"); 
//the line of code below does not work in 5.2 
lua_gettable(luaState, LUA_GLOBALSINDEX); 
lua_pcall(luaState, 0, 0, 0); 

ho letto nel 5.2 di riferimento Manuel (http://www.lua.org/manual/5.2/manual.html#8.3), che si ha la necessità di ottenere l'ambiente globale dal Registro di sistema (al posto del lua_gettable dichiarazione di cui sopra) ma non riesco a capire quali cambiamenti devo fare per farlo funzionare. Ho provato, ad esempio:

lua_pushglobaltable(luaState); 
lua_pushstring(luaState, "myLuaFunction"); 
lua_gettable(luaState, -2); 
lua_pcall(luaState, 0, 0, 0); 
+0

Vedere anche http://stackoverflow.com/questions/11093189/lua-updating-from-5-1-lua-globalsindex-problems – lhf

risposta

3

Il codice seguente dovrebbe funzionare sia in 5.1 che in 5.2.

lua_getglobal(luaState, "myLuaFunction"); 
lua_pcall(luaState, 0, 0, 0); 

Ma assicuratevi di testare il codice di ritorno di luaL_loadfile e di lua_pcall. Probabilmente starai meglio usando luaL_dofile.