目前我在控制台应用程序中使用 lua,这意味着每当脚本中出现错误lua_error()
并被调用时,就会打印相关的文本。
现在我必须把那个东西移到一个在后台没有控制台运行的 GUI 应用程序中。出现的错误文本必须提交给主应用程序,以便它能够做任何必要的事情。作为第二点,整个应用程序不必停止(就像控制台应用程序发生的那样)。
所以我的问题是:是否有可能lua_error()
在代码中的某个时间点捕获错误消息以进行进一步处理并避免应用程序停止?
目前我在控制台应用程序中使用 lua,这意味着每当脚本中出现错误lua_error()
并被调用时,就会打印相关的文本。
现在我必须把那个东西移到一个在后台没有控制台运行的 GUI 应用程序中。出现的错误文本必须提交给主应用程序,以便它能够做任何必要的事情。作为第二点,整个应用程序不必停止(就像控制台应用程序发生的那样)。
所以我的问题是:是否有可能lua_error()
在代码中的某个时间点捕获错误消息以进行进一步处理并避免应用程序停止?
正如Lua 手册所指出的,您需要使用受保护的调用来执行应用程序中的 Lua 代码。如果你遇到来自未受保护的调用的错误,Lua 将调用一个 panic 函数,它将错误输出写入你想摆脱的控制台。
特别是,lua_pcall可以提供一个自定义消息处理程序,在发生错误时调用该处理程序。您可以提供与您的 GUI 交互的自定义处理程序。
请注意,尽管消息处理程序是通过 C-longjmp 调用的,这对您在消息处理程序中可以做什么和不可以做什么有一定的影响。
或者,根本不提供消息处理程序,而是检查lua_pcall
函数的返回值。如果发生错误,可以从 Lua 堆栈的顶部检索错误消息。
lua_error
它本身不会发出任何输出:它是调用 Lua 的应用程序来处理如何报告错误。
通过console,我假设您的意思是您正在使用标准的 Lua 命令行解释器。您现在似乎想将 Lua 嵌入到您的应用程序中。在这种情况下,您使用lua_pcall
运行 Lua 脚本并检查其返回值,处理可能发生的任何错误。