IEを開くための継承されたコードがいくつかあり、いくつかの問題があります。これが私が持っているものです:
IEUnit.pas (フォームなし) には、LoadIE および OpenIE のルーチンがあります。
別のスレッドから OpenIE が呼び出され、次のようになります
procedure OpenIE(URL: OleVariant; FieldValues: string = '');
var ie : IWebBrowser2; // <-- This should become "global" variable for the IEUnit
begin
ie := CreateOleObject('InternetExplorer.Application') as IWebBrowser2;
ie.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
ShowWindow(ie.HWND, SW_SHOWMAXIMIZED);
ie.Visible := true;
...
end;
ユニットに「グローバル」つまり変数を持ち、LoadIE ルーチンを次のように記述したいと思います。
LoadIE は FormCreate (メイン スレッド) から呼び出す必要があります。
「グローバル」つまりオブジェクトを作成するだけです
ie := CreateOleObject('InternetExplorer.Application') as IWebBrowser2;
したがって、OpenIE関数はそれを作成する必要はなく、使用するだけです(目的は速度を上げることです)
問題は、2 つの異なるスレッドから同じ OLE オブジェクトにアクセスする方法です。1 つはオブジェクトを作成し、もう 1 つはそれを使用します。
スレッドを処理しないコードを記述すると、エラーが発生します
例外クラス EOleSysError とメッセージ「アプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼び出しました」
スレッドを処理するにはどうすればよいですか (私はスレッドの経験がありません。いくつかの読書とビデオのリンクは大歓迎です)。
前もって感謝します