現在、既存の Delphi 5 アプリケーションを Delphi 2010 に移植する作業を行っています。
これは、Outlook に読み込まれるマルチスレッド DLL (Outlook によってスレッドが生成される場所) です。Delphi 2010 でコンパイルすると、フォームを閉じるたびに、TMonitor.Destroy 内で「無効なポインタ操作」が発生します... system.pas にあるものです。
これは既存のやや複雑なアプリケーションであるため、調査すべき多くの方向性があり、デルファイのヘルプには、この特定の TMonitor クラスを最初にほとんどドキュメント化していません(追加情報を含むいくつかの Allen Bauer の投稿にたどり着きました)。 ) ... そこで、まず、誰かが以前にこれに遭遇したかどうか、またはこの問題の原因について何か提案があるかどうかを尋ねてみようと思いました。記録のために: 私は自分のコードで明示的に TMonitor 機能を使用していません。ここでは、Delphi 5 コードのストレート ポートについて話しています。
問題が発生した時点でコールスタックを編集します。
System.TMonitor.Destroy
System.TObject.Free
Forms.TCustomForm.CMRelease(???)
Controls.TControl.WndProc(???)
Controls.TWinControl.WndProc((45089, 0, 0, 0, 0, 0, 0, 0, 0, 0))
Forms.TCustomForm.WndProc(???)
Controls.TWinControl.MainWndProc(???)
Classes.StdWndProc(15992630,45089,0,0)
Forms.TApplication.ProcessMessage(???)