我有一个导出 DLL 并具有library
标题的 Delphi 2010 应用程序。它在 TThread 中创建 MainForm,如下所示:
var
ActiveThread: TActive;
type
TActive= class(TThread)
protected
procedure Execute; override;
end;
procedure TActive.Execute;
begin
Application.Initialize;
Application.CreateForm(MyForm, form);
Application.Run;
end;
begin
ActiveThread := TActive.Create(true);
ActiveThread.FreeOnTerminate := true;
ActiveThread.Resume;
end.
每当我通过该LoadLibrary
函数加载此 DLL 时,应用程序运行良好。(显然它使用我传递给LoadLibrary
的线程作为主线程并且没有问题)
但是,如果我尝试通过更改选项 -> 应用程序中生成的输出来将此 DLL 导出到实际的 EXE。并将标头从 更改为library
然后program
构建它并执行输出 EXE 而不是通过 windows api 加载 DLL,应用程序在尝试创建表单时挂起,特别是在Application.CreateForm(MyForm, form);
. 如果我从线程中删除应用程序初始化并将其放在主程序上,它运行得很好。
我试图呈现的表单只是一个空表单。有任何想法吗?