5

我对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);
4

1 回答 1

3

下面的代码应该适用于 5.1 和 5.2。

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

但请务必测试 和 的返回luaL_loadfilelua_pcall。您可能会更好地使用luaL_dofile.

于 2013-03-05T12:27:21.953 回答