library
DLL をエクスポートし、ヘッダーを持つ 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.
関数を介してこの DLL をロードLoadLibrary
すると、アプリケーションは正常に実行されます。(明らかに、私が渡したスレッドをLoadLibrary
メインスレッドとして使用しており、問題はありません)
しかし、この DLL を実際の EXE にエクスポートしようとすると、[オプション] -> [アプリケーション] で生成された出力を変更します。Windows API を介して DLL をロードする代わりに、ヘッダーを からlibrary
に変更してprogram
ビルドし、出力 EXE を実行すると、フォームを作成しようとすると、特に でアプリケーションがハングしますApplication.CreateForm(MyForm, form);
。アプリケーションの初期化をスレッドから削除してメイン ルーチンに配置すると、問題なく実行されます。
レンダリングしようとしているフォームは単なる空のフォームです。何か案は?