在 Qt Creator 中将 Lua 与 C++ 连接起来
目前,我正在试图将一个 Lua 脚本与宿主 C++ 应用程序连接起来。对于我的 Lua 脚本,我只有以下内容:
io.write(string.format("来自 Lua。"));
我正在使用 Qt Creator,并尝试以以下方式调用脚本:
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("来自 Lua。带有进展"));
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,因此我认为脚本在第一次加载时失败了。
我还检查了 Qt Creator 中运行工作目录的 _projects -> Build and run ->run_,它们与 Lua 脚本在同一个目录中。
我参考了以下内容:
甚至一些 Qt 论坛:
http://www.qtcentre.org/threads/60693-Can-not-use-Lua-in-QtCreator
http://www.qtcentre.org/threads/62772-Lua-into-Qt
另外,更重要的是,经过更多的故障排除,我决定在 Netbeans 上制作一个虚拟测试项目(非 Qt,只有 CML),它可以正常运行和工作。即使我尝试制作一个虚拟 fstream 程序来写入一个空的 .txt 文件,它也不知道该去哪里找它。因此,我怀疑这是一个 Qt Creator 的问题,但我已经将所有路径和构建目录指向 CWD。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

以下代码段对我有用:
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的返回值。它们将在堆栈顶部放置错误消息,可以读取并显示给用户。还可以查看luaL_loadfile文档:
查看
lauxlib.h头文件(针对Lua 5.3),可以看到LUA_ERRFILE等于LUA_ERRERR+1,而LUA_ERRERR在lua.h中定义为6。因此,在Lua 5.3中,LUA_ERRFILE等于7(其他版本可能有所不同)。因此,看起来你没有正确指定文件名,或者脚本无法读取。尝试用QFile或std::ifstream打开文件并将它打印到控制台,以确保你正确指定路径。