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