【问题标题】:Calling Lua 5.2 function from C++从 C++ 调用 Lua 5.2 函数
【发布时间】:2013-02-19 19:26:33
【问题描述】:

我对 Lua 很陌生。 我一直在查看一些如何从 C++ 调用 Lua 函数的示例代码,但示例代码使用的是 5.1,我正在尝试让它与 5.2 一起使用。

这是我的 cmets 有问题的示例代码:

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

【问题讨论】:

标签: c++ lua lua-5.2


【解决方案1】:

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

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

但是一定要测试luaL_loadfilelua_pcall的返回码。使用luaL_dofile 可能会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-01
    • 2015-12-30
    • 2022-01-04
    • 2015-07-14
    • 1970-01-01
    • 2021-04-15
    • 2015-02-12
    相关资源
    最近更新 更多