我有一个Delphi 2010应用程序,它导出一个DLL并拥有library
头文件。它在TThread中创建了它的主窗体,代码如下:
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);
处)时,应用程序会挂起。 如果我从线程中删除应用程序初始化并将其放置在主例程上,则它可以正常运行。我正在尝试渲染的窗体只是一个空白窗体。有什么想法吗?