/ Изтичане на памет при използване на емотикони на CRichEditCtrl - c ++, c, windows, mfc

Пропускане на памет при използване на емотикони на CRichEditCtrl - c ++, c, windows, mfc

Разработвам текстов редактор (за заявка за чат) въз основа на CRichEditCtrl (MFC) с поддръжка на емотикон.

След като зареждам картата с емотикони, използвам функцията OleCreateStaticFromData да го вмъкнете CRichEditCtrl, След това просто изтривам обекта на растерната карта, определен от мен. Мога да потвърдя (с помощта на GDIView полезност), че всички ресурси, които разпределям, са правилно освободени.

Това работи перфектно: изображението (емотикон) се изчертава върху CRichEditCtrl прозорец и се обработва точно като герой.

Проблемът ми е, че не знам как да деалокирам паметта (вътрешна), разпределена от OleCreateStaticFromData за управление на растерната графика (емотикон). Паметта, разпределена за всеки използван емотикон, никога не се освобождава, дори ако изтривам CRichEditCtrl обект. Бих искал да знам как да реша този въпрос. Това ли е въпрос на MFC или правя нещо нередно?

Отговори:

2 за отговор № 1

OleCreateStaticFromData връща показалец COM, който предавате на контрола за "Редактиране". Този показалец на COM е имал AddRef приложен към него, така че трябва да се обадите Release след като я предадете на контрола, това означава, че вече няма да го използвате директно. Контролът ще направи и a Release когато е унищожена, което би довело до изтриването на обекта COM.

Също така можете да запазите върнатия показалец в класа на интелигентния указател _com_ptr_t или CComPtr и това ще стане Release това автоматично.