現象
次のような状況を考えます。
-
Web ブラウザー コントロール ホスト アプリケーションまたは ActiveX コントロールを開発します。
-
アプリケーションまたは ActiveX コントロールは、HTML ページのコレクションのインターフェイスから、列挙子オブジェクトを参照します。この機能を作成するには、次のガイドラインを参照してください。
-
C++ では、コレクション インターフェイスのget__newEnum関数を呼び出して、列挙子を取得します。 コレクション インターフェイスの例としては、指しているとが、通常はIHTMLDocument2::get_allを呼び出すことによって取得します。
-
Visual Basic では、foreach コンストラクト内のシーンの背後にあるコレクション (たとえば、document.all コレクション) 経由でこの手順が行われます。
-
-
Internet Explorer 10 がインストールされているコンピューターでアプリケーションを実行するとします。
このシナリオでは、メモリ リークが発生します。注: ActiveX コントロールは、ネイティブの HTML 要素のより多くのメモリを消費するため、メモリ リークが発生は、ActiveX コントロールは、コレクション内の要素のいずれかの場合に顕著に。たとえば、web ブラウザー コントロール ホスト アプリケーションの関数で、次の C++ コードを使用すると、メモリ リークが発生します。この状況で、ActiveX コントロールは、web ページ上の要素のいずれかの場合は、大量のメモリがリークが発生します。void CEnumLeakDlg::OnBnClicked(){ IDispatch* pDocDisp = m_web.get_Document(); IHTMLDocument2* pDoc = NULL; HRESULT hr = pDocDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDoc); IHTMLElementCollection* pElColl = NULL; hr = pDoc->get_all(&pElColl); IUnknown* pEnum = NULL; hr = pElColl->get__newEnum(&pEnum); pEnum->Release(); pElColl->Release(); pDoc->Release(); pDocDisp->Release();}
解決策
この問題を解決するには、以下の更新プログラムをインストールします。
2862772 MS13-059: Internet Explorer 用の累積的なセキュリティ更新プログラム: 2013 年 8 月 13 日
詳細
ソフトウェア更新プログラムの用語の詳細については、次の文書番号をクリックして、マイクロソフト サポート技術情報の資料を参照してください。
824684マイクロソフトのソフトウェア更新プログラムを記述するために使用される一般的な用語説明