2013-03-05 12 views
5

Jestem całkiem nowy dla Lua. Przeglądam przykładowy kod, jak wywołać funkcję Lua z C++, ale przykładowy kod używa 5.1, a ja próbuję uruchomić to za pomocą 5.2.Wywołanie funkcji Lua 5.2 z C++

Oto przykładowy kod w pytaniu z moich uwag:

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); 

Czytałem w 5,2 odniesienia Manuel (http://www.lua.org/manual/5.2/manual.html#8.3), które trzeba uzyskać globalne środowisko z rejestru (zamiast lua_gettable powyższe stwierdzenie), ale nie mogę ustalić, jakie zmiany muszę wprowadzić, aby to zadziałało. Próbowałem na przykład:

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

Zobacz także http://stackoverflow.com/questions/11093189/lua-updating- from 1-5-1-lua-globalsindex-problems – lhf

Odpowiedz

3

Poniższy kod powinien działać zarówno w wersji 5.1, jak i 5.2.

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

Ale upewnij się, aby przetestować kod zwrotny od luaL_loadfile i lua_pcall. Najlepiej będzie, jeśli użyjesz luaL_dofile.