我正在开发一个基于CRichEditCtrl
(MFC)并带有表情符号支持的文本编辑器类(用于聊天应用程序)。
加载表情符号的位图后,我使用函数OleCreateStaticFromData
将其插入CRichEditCtrl
。之后我只删除自己分配的位图对象。我可以验证(使用GDIView
实用程序)我分配的所有资源都已正确发布。
这非常有效:位图(表情符号)在CRichEditCtrl
窗口上绘制,处理就像一个字符。
我的问题是我不知道如何解除分配OleCreateStaticFromData
分配的内存(内部)以管理位图(表情符号)。即使我删除CRichEditCtrl
对象,也不会释放为所使用的任何表情符号分配的内存。我想知道如何解决这个问题。这是MFC的问题还是我做错了什么?
答案 0 :(得分:2)
OleCreateStaticFromData
返回一个COM指针,您将其传递给Rich Edit控件。此COM指针已应用AddRef
,因此您必须在将Release
传递给控件后调用Release
,以表示您不再直接访问它。控件在销毁时也会执行Release
,这会导致COM对象被删除。
您也可以将返回的指针存储在智能指针类_com_ptr_t
或CComPtr
中,并自动{{1}}。