'mfc'에 해당되는 글 2건

  1. 2020.11.05 MFCButton 을 사용할 때의 Memory Leak
  2. 2008.10.14 ATL and MFC String Conversion Macros - 유니코드와 아스키 변환
2020. 11. 5. 09:43

MFCButton 을 사용할 때의 Memory Leak

정말 오랬만에 Windows application을 작업하고 있다.

그래도 MFC application을 약간 손 봤던 경험이 있어서 그것이 익숙하여 작업 중인데, Image Button을 사용하려니, 마음에 드는 것이 MFCButton 이다. (응 깔끔하다)

그런데 기존의 Wizard로 MFC Application을 만들고 나서, MFCButton을 추가해서 시험하고 있는데, 종료시 Memory Leak 이 발생하였다... (음, 뭐지? 나온지 얼마나 오래 되었는데...)

의외로 해결책은 간단했다.

MFC Application에서 사용하는 CWinApp 를 CWinAppEx 로 바꾸는 것이다....(음.. 설계 기준을 제대로 지키지 않고 Application이 만들어 졌기 때문인 듯...) 

아, 바꿀 때는 CWinApp 라는 단어로 전체 Project를 검색하여 CWinApp 단어를 가능하면 모두 CWinAppEx 로 변경하는 것이 좋겠습니다.

혹시나, 고생할 수도 있어서 여기에 기록을 남깁니다. (나만 그러나요? ㅎㅎ)

2008. 10. 14. 15:58

ATL and MFC String Conversion Macros - 유니코드와 아스키 변환


Visual Studio 6 을 사용할 때는 무조건 ASCII 를 사용했는데,
Visual Studio 2005를 사용하니, 유니코드를 Default로 사용하게 되는 군요.

그런데, 여전히 CFile 이라는 함수의 멤버들은 모두 ASCII 문자 처리를 하니 무척 난감합니다.

char 배열을 만들어서 일일히 옮겨서 썼었는데, 이미 훌륭한 매크로를 제공하고 있더군요.

여러 사이트에서 이미 소개되고 있기도 하죠.

참고 사이트: USES_CONVERSION을 사용하려면

추가로, MSDN을 찾아 보니 위의 제목으로 설명하고 있더군요.

이것도 버젼이 있군요. ATL 3.0 과 ATL 7.0 인데, 차이점은

 Old ATL 3.0 Conversion Macros  New ATL 7.0 Conversioin Classes
 스택을 사용함  작은 문자열은 스택을 사용하고, 스택이 충분히 크지 않으면 Heap을 사용함 
 함수가 종료될 때 문자열이 Free됨  변수의 영역(scope)을 벗어나면 문자열이 Free됨 
 예외처리자를 사용할 수 없음  예외처리자를 사용할 수 있음 
 반복 루틴(Loops)에서 사용하기 적합하지 않음. 함수가 종료할 때까지 메모리가 증가함  반복 루틴에서의 사용을 지원함. 매번의 반복 루틴에서 문자열이 Free됨
 큰 문자열에 적합하지 않음. 스택의 크기 제한에 걸림  문자열이 커도 상관 없음. Stack/Heap을 사용하기 때문
 USES_CONVERSION 정의가 필요함  USES_CONVERSION 정의를 하지 않음
 OLE의 경우에는 OLE2ANSI를 정의  OLE인 경우에는 W와 동등하게 취급함

이군요.

차이점만 봐서는 무조건 ATL 7.0의 classes를 써야 겠군요.

ATL 7.0 에서는

A, W, T , OLE 라는 문자를 조합해서 사용합니다.

사용법은 나중에 시간이 되면, 써 보도록 하죠.

그럼. 근데 문서 만들기 무척 힘들군요. 쉬운 방법 없을까요? 뭐 워드로 만들어서 올린다던가 뭐 그런거요?