2010-05-31 10 views
7

Ich entwickle eine Text-Editor-Klasse (für eine Chat-Anwendung) basierend auf CRichEditCtrl (MFC) mit Emoticon-Unterstützung. Nachdem ich die Bitmap des Emoticons geladen habe, verwende ich die Funktion OleCreateStaticFromData, um sie in CRichEditCtrl einzufügen. Danach lösche ich einfach das von mir selbst vergebene Bitmap-Objekt. Ich kann überprüfen (mit einem GDIView Dienstprogramm), dass alle Ressourcen, die ich zuordnen, ordnungsgemäß freigegeben wurden.Speicherverlust bei der Verwendung von Emoticons auf CRichEditCtrl

Das funktioniert perfekt: Die Bitmap (Emoticon) wird auf dem CRichEditCtrl Fenster gezeichnet und wird wie ein Zeichen behandelt.

Mein Problem ist, dass ich nicht weiß, wie Sie den Speicher freigeben (intern) von OleCreateStaticFromData zugeordnet, um die Bitmap (Emoticon) zu verwalten. Der Speicherplatz für jedes verwendete Emoticon wird nie freigegeben, auch wenn ich das Objekt CRichEditCtrl lösche. Ich würde gerne wissen, wie ich dieses Problem beheben kann. Ist das ein MFC-Problem oder mache ich etwas falsch?

Antwort

2

OleCreateStaticFromData gibt einen COM-Zeiger zurück, den Sie an das Rich-Edit-Steuerelement übergeben. Auf diesen COM-Zeiger wurde eine AddRef angewendet. Sie müssen also Release aufrufen, sobald Sie sie an das Steuerelement übergeben haben, um anzuzeigen, dass Sie nicht mehr direkt darauf zugreifen. Das Steuerelement wird auch eine Release tun, wenn es zerstört wird, was dazu führen sollte, dass das COM-Objekt gelöscht wird.

Sie können den zurückgegebenen Zeiger auch in einer Smart Pointer-Klasse _com_ptr_t oder CComPtr speichern, und es wird automatisch Release.

Verwandte Themen