TWebBrowser コンポーネントを含むフォームをポップアップする Delphi XE2 で DLL を作成しようとしています。WebBrowser.Navigate2 メソッドが呼び出されると、アプリケーションの終了時にユニット (または任意のユニット) のファイナライズ セクションは呼び出されません。Navigate2 が呼び出されない場合、ファイナライズ セクションは問題なく実行されます。
dll は C++ (現時点では VS 2010 MFC コンソール) から呼び出され、インポート ライブラリでリンクされています。
他にも方法はありますが、すでに書いたコードを再利用したいと思います。
何が起こっているのか誰にも分かりませんか?
ありがとう。
以下は、問題を簡単に再現したものです。
library DisplayPatientAlertsIntf;
exports DisplayPatientAlertsA name 'DisplayPatientAlertsA@4';
begin
end.
unit uAlertWindow;
interface
uses
Winapi.ActiveX,
Forms,
SHDocVw,
Graphics, Controls;
function DisplayPatientAlertsA(PatientID : PAnsiChar): Integer; export; stdcall;
implementation
var ts : TStringList;
function DisplayPatientAlertsA(PatientID : PAnsiChar): Integer; export; stdcall;
var Form1 : TForm;
WebBrowser1 : TWebBrowser;
DidCoInit : Boolean;
begin
DidCoInit := Succeeded(CoInitialize(nil));
try
Form1 := TForm.Create(nil);
try
WebBrowser1 := TWebBrowser.Create(nil);
try
WebBrowser1.ParentWindow := Form1.Handle;
WebBrowser1.Align := alClient;
WebBrowser1.Navigate2('file://c:\temp.html');
Form1.ShowModal;
finally
WebBrowser1.Free;
end;
finally
Form1.Free;
end;
finally
if DidCoInit then
CoUninitialize;
end;
Result := 0;
end;
initialization
ts := TStringList.Create;
finalization
ts.Free;
end.
更新 2013.03.19 別の問題 (dll 内の dbExpress ドライバー) を解決しているときに、インポート ライブラリを使用して静的にリンクされた dll から動的に読み込まれた dll に変更すると、すべてが機能し始めました。