3

libraryDLL をエクスポートし、ヘッダーを持つ 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);。アプリケーションの初期化をスレッドから削除してメイン ルーチンに配置すると、問題なく実行されます。

レンダリングしようとしているフォームは単なる空のフォームです。何か案は?

4

1 に答える 1