【发布时间】:2016-07-05 16:36:11
【问题描述】:
下午好, 我正在开发一个 LUA/C++ 应用程序,我需要 lua 能够递归地调用其他 lua 代码,例如:C++ 调用 lua 函数,lua 函数从另一个使用注册的 C 函数加载的字符串调用另一个 lua 函数在第一个 lua 函数的开头运行;
这是我正在遵循的步骤:
lua_State* state = luaL_newstate();
luaL_openlibs(state);
lua_register(state, "secondLua", secondLua);
lua_getfield( _luaState, LUA_GLOBALSINDEX, "init" );
lua_pcall( _luaState, 0, 0, 0 );
int secondLua(lua_State* state){
char* myString[128] = "function init2()\n io.write(\"hello\")\n end";
luaL_loadstring(pLuaState, myString);
lua_getfield(pLuaState,LUA_GLOBALSINDEX, "init2"); // function init2 declared on myString
lua_pcall(pLuaState, 0, LUA_MULTRET, 0);
//getting "attempt to call a nil value" here
return 0;
}
感谢任何帮助,其次,我想知道是否有一种方法可以将第二个函数命名为“init”以及第一个函数;
PS:我在 LUAJIT 上使用的是 C++14 和 lua 5.1,我不能使用 lua 的 dofile;
【问题讨论】:
-
与您的实际问题无关,但您是否考虑过使用包装库,例如 sol ?
-
为什么这个标签是
[c]? -
@KemyLand 因为我猜这是 Lua 的 C API。
-
@Jakuje:OP 无论如何都在谈论 C++,而不是 C。
-
这个编译?对
lua_getfield的第二次调用缺少参数。