从c++调用Lua 5.2函数

Calling Lua 5.2 function from C++

本文关键字:函数 Lua c++ 调用      更新时间:2023-10-16

我对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