2010-05-31 195 views
7

我正在開發基於CRichEditCtrl(MFC)的表情符支持的文本編輯器類(用於聊天應用程序)。在CRichEditCtrl上使用表情符號時發生內存泄漏

我加載表情符號的位圖後,使用函數OleCreateStaticFromData將其插入CRichEditCtrl。之後,我只刪除自己分配的位圖對象。我可以驗證(使用GDIView實用程序)我分配的所有資源都已正確釋放。

這很好用:位圖(表情符號)在CRichEditCtrl窗口上繪製,並且像字符一樣處理。

我的問題是,我不知道如何釋放由OleCreateStaticFromData分配的內存(內部)來管理位圖(表情符號)。分配給任何表情符號的內存從不釋放,即使我刪除了CRichEditCtrl對象。我想知道如何解決這個問題。這是一個MFC的問題,或者我做錯了什麼?

回答

2

OleCreateStaticFromData返回您傳遞給Rich Edit控件的COM指針。此COM指針已應用AddRef,因此,一旦將它傳遞給控件,​​就必須調用Release,以表示您不再直接訪問它。該控件在銷燬時也會執行Release,這會導致COM對象被刪除。

您也可能將返回的指針存儲在智能指針類_com_ptr_tCComPtr中,它會自動將Release存儲起來。

相關問題