태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

달력

05

« 2017/05 »

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  

MFC에서 GDI+를 사용하다보면 소스에 자동으로 추가되는 DEBUG_NEW 때문에 귀찮아 지죠. operator newdelete 를 재정의해버려서 컴파일이 안된다거나 실행 중 메모리 오류를 발생시키거든요.

그렇다고 DEBUG_NEW 를 아예 꺼버리기도 굉장히 찜찜하죠. 메모리 관련된 오류를 잡아주는 가장 기본적인 장치니까요. 그래서 GDI+ 개체를 생성하고 지울 때는 좀 번거롭지만 ::new, ::delete 같이 일일이 재정의되지 않은 버전으로 사용하기도 하는데, 그것도 Bitmap::FromHBITMAP 메소드 같이 내부에서 포인터를 생성해서 리턴하는 메소드를 사용할 때는 해결책이 되지 않습니다. GDI+ Bitmap 의 경우에는 FromHBITMAP 메소드와 동일한 역할을 하는 생성자가 있어서 그나마 다행이긴 합니다만 일일이 신경쓰는 것도 귀찮은 일인 것은 분명합니다.

이번 기회에 잠깐 검색을 해보니 이미 유명한 문제인지 MS의 support 사이트에 해결책이 올라와있네요. ( PRB : MFC DEBUG_NEW does not work with GDI+ )

좋습니다. 그런데 MS에서 제공하는 헤더를 집어넣으니 이제는 C4100 unreferenced formal parameter 경고가 왕창 뜹니다. 모든 문제가 한 방에 깔끔하게 해결되지는 않는군요.

#pragma warning 으로 꺼버릴 수도 있는데, 실제로 문제가 되는 상황에서 경고가 안나오는 것도 문제니까 헤더에서 4100 경고를 꺼버리고 싶지는 않습니다. #pragma warning push / pop 으로 감싸주는 것도 방법이긴 하지만 이렇게 거창한 방법까지 써야하나... 역시 검색을 해보았습니다.

검색을 해보니 역시 이 상황에 맞는 해결책이 있네요. 바로 UNREFERENCED_PARAMETER() 매크로였습니다. 무려 WinNT.h 에 정의되어 있는 녀석이군요. DBG_UNREFERENCED_LOCAL_VARIABLE() 같은 친구들도 있네요.

MS에서 제공해준 Gdiplus.h 대용 헤더 파일에 UNREFERENCED_PARAMETER() 매크로를 적용하는 걸로 모든 문제가 해결되었습니다.

신고
TAG ,
Posted by wafe

댓글을 달아 주세요