名前 題名 ▼ takaさん > ▼ Mr.XRAYさん > > > ともかく,他のアプリの操作は難しいです.ハイ. > > > > 最終的な手段はフックかも知れません. > > 相手が他のアプリなのでローカルフックでは補足できる可能性は低いです. > > > > [03_位置とサイズを指定してアプリを起動 - WH_CBT フック使用] > > http://mrxray.on.coocan.jp/Delphi/plSamples/266_App_CreateOpen.htm#03 > > > > グローバルフック,これもまた難しい ... (^^; > > http://mrxray.on.coocan.jp/Delphi/plSamples/720_Acrobat.htm > を参考にしてインポート後 試してみました。 > > なにか呼び出して、AcroPDF1の接続が確立してから > アプリを終了すると終了時にアクセス違反が発生するようです。 > > procedure TForm1.Button1Click(Sender: TObject); > var info : string; > begin > info := AcroPDF1.GetVersions(); > MessageBox(Handle, PWideChar(info), '情報', 0); > end; > > を実行後にアプリを終了しても アクセス違反になります > > 一度違反が発生したら、2回目はないようなので > 終了前に手動でコンポーネントを破棄してしまえばいいのかもしれないです。 > // try except でエラーを破棄する > > procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); > begin > CanClose := True; > if Assigned(AcroPDF1) then > try > FreeAndNil(AcroPDF1); > except > AcroPDF1 := nil; > end; > end; > > --------------------------------------------- > > デバッガで実行して、このコードで故意に落とすと > procedure TForm1.ButtonDebugClick(Sender: TObject); > begin > if Not Assigned(AcroPDF1) then > Exit; > AcroPDF1.GetVersions(); > FreeAndNil(AcroPDF1); // ここにブレークポイントを設置する > // Buttonをクリックし、停止したらトレース実行する > // system::_IntfClear で落ちる > end; > > system: _IntfClear > の IInterface._Releaseの次の行で落ちているのがわかりました。 > 内容は、PUREPASCALの部分のコードなんでしょうけど > アセンブラで書かれているのでわかりません。 > > 落ちている前後を > Delphi10.2とDelphi2005と比べるとコードはほぼ同じですので、 > 気が向いたら Delphi2005で同じエラーが発生するか確認してみようと思います GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link