目前,我正在尝试将Lua脚本链接到主机C++应用程序。对于我的Lua剧本,我只有:
io.write(string.format("From Lua."));为此,我使用了Qt创建者,并试图像这样调用脚本:
lua_State *state = luaL_newstate();
lua_call(state , 0 , 0);这一直给我一个PANIC: unprotected error in call to Lua API (attempt to call a string value)错误。
我尝试过用这样的函数包装脚本:
function main()
io.write(string.format("From Lua.With Progress"));
end然后使用与前面相同的代码调用它,但添加如下:
lua_getglobal(state , "main");
lua_pcall(state , 0 , 0 , 0);这不会产生错误,但是:
lua_call(state , 0 , 0) 给出一个PANIC: unprotected error in call to Lua API (attempt to call a nil value)错误。
在解决更多问题后,我发现luaL_loadfile(state , "EngineRxer.lua")返回的是值7而不是0,所以我假设脚本一开始就没有加载。
我还检查了directory项目中的运行工作目录、->构建和运行->run,它们与Lua脚本位于同一个目录中。
我提到过:
甚至还有一些Qt论坛:
http://www.qtcentre.org/threads/60693-Can-not-use-Lua-in-QtCreator
http://www.qtcentre.org/threads/62772-Lua-into-Qt
另外,提到我的.pro文件是什么样子也很重要,所有Lua库和包含都已经在其中了:
LIBS += \
/usr/local/Cellar/lua/5.3.4_3/lib/liblua.5.3.4.dylib
INCLUDEPATH += \
/usr/local/Cellar/lua/5.3.4_3/include更重要的是,在进行了更多的故障排除后,我决定在Netbeans上做一个虚拟测试项目(NonQt on ),它运行并正常工作。即使我尝试制作一个虚拟的fstream程序来写入一个空的.txt文件,它也不知道在哪里找到它。因此,我怀疑这是directories问题,但我有我所有的路径和构建目录指向CWD。
发布于 2018-05-01 13:02:36
下面的片段适用于我:
int main(int argc, char** argv)
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
const char* script = "io.write(\"From Lua\")"; // or read the string from a user, file, etc.
if(luaL_loadstring(L, script) || lua_pcall(L, 0, 0, 0))
{
//error occured
const char* s = luaL_checkstring(L, -1);
fprintf(stderr, "Error in script: %s", s);
exit(EXIT_FAILURE);
}
lua_close(L);
exit(EXIT_SUCCESS);
}您是否记得调用luaL_openlibs并加载您的脚本?
记住要检查lua_load*和lua_pcall的返回值。它们将在堆栈顶部放置一条错误消息,您可以将其读取并显示给用户。
还请参阅加载文件的文档:
这个函数返回与lua_load相同的结果,但是如果它不能打开/读取文件,它有一个额外的错误代码LUA_ERRFILE。
在lauxlib.h头(对于Lua5.3)中,我们看到LUA_ERRFILE等于LUA_ERRERR+1,在lua.h中定义为6,因此LUA_ERRFILE等于7(在Lua5.3中;其他版本可能有所不同)。
因此,您似乎没有正确地指定文件名,否则脚本就无法读取。尝试使用QFile或std::ifstream打开文件,并将其打印到控制台,以确保您正确地指定了路径。
https://stackoverflow.com/questions/50110024
复制相似问题