2010-05-31 151 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存储起来。

相关问题