2010-05-31 5 views
7

이모티콘을 지원하는 CRichEditCtrl (MFC)을 기반으로하는 텍스트 편집기 클래스 (채팅 응용 프로그램 용)를 개발하고 있습니다.CRichEditCtrl에서 이모티콘을 사용하는 동안 메모리 누수가 발생했습니다.

이모티콘의 비트 맵을로드 한 후 OleCreateStaticFromData 함수를 사용하여 CRichEditCtrl에 삽입합니다. 그 후 나는 나 자신이 할당 한 비트 맵 객체를 삭제한다. 할당 한 모든 리소스가 올바르게 릴리스되었는지 확인할 수 있습니다 (GDIView 유틸리티 사용).

완벽하게 작동합니다. 비트 맵 (이모티콘)은 CRichEditCtrl 창에 그려지며 문자처럼 처리됩니다.

제 문제는 비트 맵 (이모티콘)을 관리하기 위해 OleCreateStaticFromData에 의해 할당 된 메모리 (내부)를 할당 해제하는 방법을 모르겠다는 것입니다. 사용 된 이모티콘에 할당 된 메모리는 심지어 CRichEditCtrl 객체를 삭제하더라도 해제되지 않습니다. 그 문제를 해결하는 방법을 알고 싶습니다. 그게 MFC의 문제인가, 아니면 내가 잘못하고있는 것인가?

답변

2

OleCreateStaticFromData은 서식있는 컨트롤에 전달하는 COM 포인터를 반환합니다. 이 COM 포인터는 AddRef이 적용되었으므로 더 이상 직접 액세스하지 않는다는 것을 나타 내기 위해 컨트롤에 전달한 후 Release으로 호출해야합니다. 또한 컨트롤이 삭제되면 COM 개체가 삭제되어야하므로 Release이 수행됩니다.

반환 된 포인터를 스마트 포인터 클래스 _com_ptr_t 또는 CComPtr에 저장하면 Release이 자동으로 저장됩니다.

관련 문제