Вызов функции Lua 5.2 из переполнения стека

Я довольно новичок в Lua.
Я искал пример кода для вызова функции Lua из C ++, но пример кода использует 5.1, и я пытаюсь заставить его работать с 5.2.

Вот пример кода с моими комментариями:

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

Я прочитал в 5,2 справочной мануэль (http://www.lua.org/manual/5.2/manual.html#8.3) что нужно получить глобальную среду из реестра (вместо приведенной выше инструкции lua_gettable), но я не могу понять, какие изменения мне нужно внести, чтобы это работало. Я пробовал, например:

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

5

Решение

Код ниже должен работать как в 5.1, так и в 5.2.

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

Но не забудьте проверить код возврата luaL_loadfileи из lua_pcall, Вам, вероятно, будет лучше использовать luaL_dofile,

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]