- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
目前我正在尝试将 Lua 脚本与主机 C++ 应用程序链接起来。对于我的 Lua 脚本,我所拥有的是:
io.write(string.format("From 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("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,所以我假设脚本首先加载失败。
我还在 Qt Creator projects -> Build and run ->run 中检查了我的运行工作目录,它们与 Lua 脚本位于同一目录中。
我提到了:
Qt with Lua | Where to place lua file(s)
甚至一些 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 只是 CML)上创建一个虚拟测试项目,它运行并运行良好。即使我尝试制作一个假人 fstream
程序写入一个空的 .txt 文件,它不知道在哪里可以找到它。所以我怀疑这是 Qt Creator 的问题,但我的所有路径和构建目录都指向 CWD。
最佳答案
以下代码片段对我有用:
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 的文档:
This function returns the same results as lua_load, but it has an extra error code LUA_ERRFILE if it cannot open/read the file.
查看 lauxlib.h
header (对于 lua 5.3),我们看到 LUA_ERRFILE
等于 LUA_ERRERR+1
,即在 lua.h
中定义为 6。因此 LUA_ERRFILE
等于 7(在 Lua 5.3 中;其他版本可能有所不同)。
因此看起来您没有正确指定文件名,或者脚本不可读。尝试使用 QFile 或 std::ifstream 打开文件并将其打印到控制台以确保您正确指定了路径。
关于c++ - 在 Qt Creator 中将 Lua 与 C++ 链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50110024/
如何从 a.lua 传递值至 b.lua ? 让我们说在我的 a.lua我有这个变量代码。 local value = "Hello WOrld!" director:changeScene ("b"
我有一个使用命令行解释器运行的 lua 脚本,该脚本需要从文件加载表。 该表存储如下: create_object_action = { reflexive = true, which
我通过静态链接的方式在我的项目中嵌入了 Win32 上的 Lua(不,我不能切换到 DLL)。我想捆绑更多使用 native 代码的 Lua 扩展 - 而不仅仅是纯 .lua 文件。具体来说,我想捆绑
我需要一些帮助来解析 lua 文件的命令行。我正在执行一个 lua 文件,该 lua 文件有一个命令“dofile(2nd.lua-file)”,但是,我想通过第一个 lua 文件将一些参数传递给第二
这是我的代码示例: listOfPeople = {} listOfPeople["test"] = "hello" listOfPeople = nil “hello”字符串是否丢失并形成内存泄漏?
在一些源代码中,我看到了“Underscore.lua”模块的用法。 _ = require 'underscore' 描述如下: Underscore.lua is a Lua library th
在一些源代码中,我看到了“Underscore.lua”模块的用法。 _ = require 'underscore' 描述如下: Underscore.lua is a Lua library th
我一直在编程 io.write("How many languages do you speak?\n") answer = io.read() if (answer == 1) then io.wr
这个问题在这里已经有了答案: Getting multiple values from a function without creating a variables in LUA (2 个答案)
在阅读 Lua manual 时我遇到了这部分: 函数调用和赋值都可以以左括号开头。这种可能性导致了 Lua 语法中的歧义。考虑以下片段: a = b + c (print or io.write)(
假设我有以下循环: for name in poll() do if name == "quit" then return 0 end end "quit" 字符串是否
Pandoc 通过其 --lua-filter 参数原生支持 lua 过滤器。 但是,我想知道它使用的是什么版本的 lua,以及是否可以将 lua 模块(我相信它依赖于 C 代码)导入其中。 这是我调
这种语言是面向对象的语言吗? 它经常用作OO语言吗? 最佳答案 Lua 完全有能力 prototype-based类似于 JavaScript 的面向对象编程。 Prototype-based pro
我想从 C++ 传递一个 Lua 脚本(Lua 解释器可以处理的代码)并取回结果。 我在网上查看,但找不到任何可以帮助我的示例。我可以从 C++ 调用 Lua 函数,但这需要您使用 Lua 函数创建一
我正在阅读“在 Lua 中编程”,但我不明白这段代码中 Lua 中函数的行为: function newCounter () local i = 0 return function () --
我最近一直在查找 Lua 中的链表,并有一个简单的问题,到目前为止我还没有找到答案 local head = nil head = {next = head, value = "d"} head =
我知道有tonumber()函数,但是问题是我需要转换较大的数字,例如1000100110100011111010101001001001001100100101。我可以自己写,但是有没有办法将其集成
是否可以在 Lua 中对多个值执行算术运算。 我在 Windows 5.1.4 上使用 Lua。 目前我必须将多个值放入一个表中,然后解压缩它们,我希望能够跳过这一步。 是否可以。 这是我目前拥有的:
有什么区别吗 local splitPathFileExtension = function (res) end 和 function splitPathFileExtension(res) end
在下面的代码中,谁能解释一下 b,a = a,b 内部是如何工作的? -- Variable definition: local a, b -- Initialization a = 10 b = 3
我是一名优秀的程序员,十分优秀!