在C++中调用Lua 5.2函数

我对 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);
//下面的代码需要重写
lua_pushstring(luaState, "myLuaFunction");
//下面的代码在 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);
点赞
用户107090
用户107090

下面的代码应在5.1和5.2中都可以工作。

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

但是请确保检查luaL_loadfilelua_pcall的返回代码。最好使用luaL_dofile

2013-03-05 12:27:21