作成中の ActiveX コントロールで複雑な問題が発生しています。Internet Explorer が、プロセスのシャットダウン時にコントロールを適切にアンロードできないように見えることがあります。これにより、コントロール インスタンスのデストラクタが呼び出されなくなります。
コントロールは C++ で記述され、ATL を使用し、Visual Studio 2005 を使用してコンパイルされます。コントロール インスタンスのデストラクタは、ユーザーがコントロールが埋め込まれているページから離れてブラウズするときに常に呼び出されます。問題は、ブラウザが閉じられている場合にのみ発生します。
デバッガーで IE を実行しても異常は見られません - デバッガーは例外、アクセス違反、またはアサーションの失敗をキャッチしませんが、問題はまだ残っています - コントロールのデストラクタにブレークポイントを設定できますが、決してブラウザを閉じるとヒットします。
さらに、コントロールの複数のインスタンスを埋め込んだ単純な HTML ページをロードしても、問題は見られません。この問題は、Web ページに動的にタグを挿入する Web アプリケーションからコントロールがインスタンス化された場合にのみ発生するようです。しかし、これはデータに依存しているため、IE の問題である可能性があることを示しているようです。
デバッガーで簡単なテスト ケースを実行すると、コントロールのデストラクタにブレークポイントを設定でき、毎回ヒットします。これにより、コントロール自体の問題が除外されると思います(たとえば、インターフェースリークのように、デストラクタが呼び出されないようにするエラーなど)。
私はほとんどのテストを IE 6 で行っていますが、IE 7 でも問題が発生するのを見てきました。IE 8 はテストしていません。
私の現在の作業仮説は、動的 HTML コードに、ブラウザーが ActiveX コントロールのインターフェイスをリークさせる何かがあるというものです。これまでのところ、これをアプリケーションの外部で再現する優れたテスト ケースを作成できませんでした。また、アプリケーションが大きすぎて、適切なテスト ケースを作成できませんでした。
この種の動作を引き起こすことが知られている IE のバグの可能性について、誰かが洞察を提供できることを期待していました。ちなみに、以下に示す回答は一般的すぎます。これを引き起こすことが知られている特定の状況を探しています。きっと誰かがこれを前に見たことがあるでしょう。