2010-05-31 17 views
7

Estoy desarrollando una clase de editor de texto (para una aplicación de chat) basada en CRichEditCtrl (MFC) con soporte para emoticones.Fuga de memoria durante el uso de emoticones en CRichEditCtrl

Después de cargar el mapa de bits del emoticón, utilizo la función OleCreateStaticFromData para insertarlo en CRichEditCtrl. Después de eso, simplemente elimino el objeto de mapa de bits asignado por mí mismo. Puedo verificar (utilizando una utilidad GDIView) que todos los recursos que asigné se han liberado correctamente.

Esto funciona perfectamente: el mapa de bits (emoticon) se dibuja en la ventana CRichEditCtrl y se maneja como un personaje.

Mi problema es que no sé cómo desasignar la memoria (interna) asignada por OleCreateStaticFromData para administrar el mapa de bits (emoticon). La memoria asignada para cualquier emoticon utilizado nunca se libera, incluso si elimino el objeto CRichEditCtrl. Me gustaría saber cómo solucionar ese problema. ¿Es ese un problema de MFC o estoy haciendo algo mal?

Respuesta

2

OleCreateStaticFromData devuelve un puntero COM que pasa al control Rich Edit. A este puntero COM se le ha aplicado un AddRef, por lo que debe llamar al Release una vez que lo haya pasado al control, para indicar que ya no podrá acceder a él directamente. El control también hará un Release cuando se destruya, lo que provocará la eliminación del objeto COM.

También puede almacenar el puntero devuelto en una clase de puntero inteligente _com_ptr_t o CComPtr y lo Release automáticamente.