Разработвам текстов редактор (за заявка за чат) въз основа на CRichEditCtrl
(MFC) с поддръжка на емотикон.
След като зареждам картата с емотикони, използвам функцията OleCreateStaticFromData
да го вмъкнете CRichEditCtrl
, След това просто изтривам обекта на растерната карта, определен от мен. Мога да потвърдя (с помощта на GDIView
полезност), че всички ресурси, които разпределям, са правилно освободени.
Това работи перфектно: изображението (емотикон) се изчертава върху CRichEditCtrl
прозорец и се обработва точно като герой.
Проблемът ми е, че не знам как да деалокирам паметта (вътрешна), разпределена от OleCreateStaticFromData
за управление на растерната графика (емотикон). Паметта, разпределена за всеки използван емотикон, никога не се освобождава, дори ако изтривам CRichEditCtrl
обект. Бих искал да знам как да реша този въпрос. Това ли е въпрос на MFC или правя нещо нередно?
Отговори:
2 за отговор № 1OleCreateStaticFromData
връща показалец COM, който предавате на контрола за "Редактиране". Този показалец на COM е имал AddRef
приложен към него, така че трябва да се обадите Release
след като я предадете на контрола, това означава, че вече няма да го използвате директно. Контролът ще направи и a Release
когато е унищожена, което би довело до изтриването на обекта COM.
Също така можете да запазите върнатия показалец в класа на интелигентния указател _com_ptr_t
или CComPtr
и това ще стане Release
това автоматично.