我对Lua很陌生。
我一直在看一些示例代码,以了解如何从C++调用Lua函数,但是示例代码使用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.1和5.2中均可使用。

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

但是请确保测试luaL_loadfilelua_pcall的返回码。使用luaL_dofile可能会更好。

07-25 22:47