我现在有一个相当罕见的情况.我有一个直接与Windows的消息队列交互的应用程序.此应用程序还使用LuaJIT运行外部Lua脚本.我想为这些脚本设置调试工具,因此我创建了一个普通的VCL应用程序,然后将其转换为DLL库.当第一个应用程序启动与库的调试会话时,此DLL创建一个分离的线程,其中整个VCL工具被初始化并运行.
procedure TDebuggerThread.Execute;
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm (TMainForm, MainForm);
Application.Run;
end;
Run Code Online (Sandbox Code Playgroud)
VCL是否完全支持以这种方式执行?哪个线程会TThread.Synchronize (Proc: TThreadProc)发送消息?
Inb4"向VCL和主应用程序的消息将会混乱" - 它们不会因为每个线程都有自己的消息队列.
此外,您可以在此处查看来源.(也许)有问题的库被命名LuaDebugger.在地方适当的客户端(Core,Engine,Client)我目前使用的LuaDefaultHost,这是一个相当简单的控制台应用程序,要求调试器和行为大多喜欢lua.exe.与控制台客户端,调试器的工作原理出奇的顺利-我遇到的唯一问题是,如果我关闭控制台窗口,而库仍在使用,VCL抛出"窗口句柄不再有效"(俄文:/).如果我让客户端按照预期的方式完成与调试器的交互,一切都很顺利.可能Windows.TerminateThread在单元定稿期间调用应该解决这个问题.