gpt4 book ai didi

c++ - Lua:加载第二个字符串后无法获取字段;

转载 作者:行者123 更新时间:2023-11-30 03:43:26 25 4
gpt4 key购买 nike

下午好,我正在开发一个 LUA/C++ 应用程序,我需要 lua 能够从中递归调用其他 lua 代码,例如:C++ 调用 lua 函数,lua 函数从另一个字符串调用另一个 lua 函数,该字符串使用注册的 C 函数加载在第一个 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;

最佳答案

lua_loadstring() 编译提供的源代码并将 Lua block 放入堆栈。但是它不会执行它,所以 init2() 仍然没有在您期望的时候定义。
将 lua_loadstring() 替换为 luaL_dostring() 以实际运行该 block 并定义新的 lua 函数。或者在 lua_loadstring() 之后立即调用 lua_pcall()。实际上,luaL_dostring() 正是这样做的 - lua_loadstring() 后跟 lua_pcall()。

关于c++ - Lua:加载第二个字符串后无法获取字段;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36092581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com