【发布时间】:2012-11-29 08:12:48
【问题描述】:
我有一个定期运行 Lua 脚本的应用程序。在脚本中,有时我创建了一个自定义注册的 Lua 函数来检查一些参数并决定 Lua 脚本应该继续还是退出。理想情况下,逻辑不应该是脚本的一部分,我可以考虑使用 Lua 脚本来解决这个问题,但我想知道是否可以在不结束应用程序的情况下停止 Lua 脚本的执行。
我有一个用 Delphi 编写的自定义函数,并使用 Lua 5.1 公开给 Lua 脚本。 Lua 脚本如下所示,Lua 中的脚本使用luaL_loadbuffer 启动。
io.write("Script starting\n");
--Custom Function
ExitIfFound();
io.write("Script continuing\n");
我的自定义函数看起来像这样,下面我提供了我尝试使用lua_error 来停止脚本的尝试之一...
function ExitIfFound(LuaState: TLuaState): Integer;
var
s: AnsiString;
begin
s := 'ExitIfFound ending script, next Lua script line not called';
lua_pushstring(LuaState, PAnsiString(s));
lua_error(LuaState);
end;
当我的自定义函数被调用时,我不确定如何在没有进一步评估的情况下退出 Lua 脚本。我看过一些帖子提到 Lua 并在 C 中使用 setjmp 和 longjmp,但我很好奇这些如何翻译 Delphi。
在上面的示例中,当我使用 lua_error 时,整个程序在 Windows 执行其典型操作时崩溃,[luarun.exe has stopped working] ...
有了所有这些,我对将 Lua 集成到 Delphi 还是很陌生,希望我能找到一些更简洁的选择来探索。
【问题讨论】:
-
您使用的是哪些 Delphi Lua 导入单元?你的 Lua DLL 是编译为 C 还是 C++?
-
我做的几乎一样,而且效果很好。听起来好像有什么东西触发了异常。在调试器下运行它,看看发生了什么......
-
@Koscielski 我们已经更正了你的问题,但是下次请正确写Lua,见stackoverflow.com/questions/13615975