私が書いているActiveXコントロールで問題が起こっています - 時には、Internet Explorerがプロセスシャットダウン時にコントロールを適切にアンロードできないように見えることがあります。これにより、コントロールインスタンスのデストラクタが呼び出されなくなります。Internet ExplorerがActiveXコントロールを適切にアンロードできないのはどのような状況ですか?
コントロールはC++で記述され、ATLを使用し、Visual Studio 2005を使用してコンパイルされます。コントロールが埋め込まれているページからユーザーがブラウズすると、コントロールインスタンスのデストラクタが常に呼び出されます。閉まっている。
IEをデバッガの下で実行すると、デバッガが例外やアクセス違反、アサーションの失敗をキャッチしないという珍しいことは何も表示されませんが、問題は残ります。コントロールのブレークポイントを設定できますデストラクタと私はbroswerを閉じるときに打撃を受けることはありません。
さらに、コントロールの複数のインスタンスを埋め込んだ単純なHTMLページを読み込むと、問題は表示されません。この問題は、Webページから動的にタグを挿入するWebアプリケーションからコントロールがインスタンス化されたときにのみ発生します。もちろん、この問題の原因を知らず、この情報が適切かどうかはわかりませんが、データに依存しているので、これはIEの問題かもしれないことを示しているようです。
デバッガの下で簡単なテストケースを実行すると、コントロールのデストラクタにブレークポイントを設定することができ、毎回ヒットします。私はこれがコントロール自体の問題を排除すると信じています(例えば、デストラクタが呼び出されることを防ぐエラー、例えばインターフェイスリークのようなもの)。
私はIE 6でテストしますが、問題はIE 7でも発生することがわかりました。私はIE 8をテストしていません。
私の現在の仮説は、ブラウザがActiveXコントロール上のインターフェイスをリークさせるような動的HTMLコードに何かがあることです。今のところ、私はアプリケーションの外側でこれを再現する良いテストケースを生成することができず、アプリケーションは大きすぎて良いテストケースを作ることができません。
私は、誰かがこの種の動作を引き起こす可能性がある可能性のあるIEのバグに洞察力を提供できることを期待していました。ところで、以下の答えはあまりにも一般的です - 私はこれを引き起こすことが知られている特定の状況を探しています。確かにそこにいる誰かが以前これを見てきました。
ありがとうございます。動的HTMLコードは十分に毛深いので、どのように動作するかは誰にも分かりません。問題を再現するテストケースを作成するのに十分なだけ解明しようとしています。 –