Programming

GDI+ 사용하기 위한 준비

steloflute 2020. 3. 1. 00:59

출처: https://alexjeon1227.tistory.com/21?category=484908

 

GDI+ 사용하기 위한 준비

GDI+를 테스트해보려고 초기화 방법을 한참동안 검색해 보았다. 아마도 대부분의 포스팅에서 아래와 같은 설명을 발견할 수 있다. 출처는 굳이 언급하지 않아도 될만큼 수많은 블로그에 똑같은 내용이 있다 // 사..

alexjeon1227.tistory.com

하지만 이대로 컴파일해보면 아래와 같은 에러메시지를 한참을 보게 된다.

(테스트환경은 VC++ 2010 Express. 다른 환경에서는 상황이 좀 달라질 수 있다)

 

1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(74): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(74): error C2440: 'initializing' : cannot convert from 'const char [37]' to 'int' 1> There is no context in which this conversion is possible 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(74): error C2146: syntax error : missing ';' before identifier 'IImageBytes' 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(74): error C2470: 'IImageBytes' : looks like a function definition, but there is no parameter list; skipping apparent body 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(74): error C2059: syntax error : 'public' 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(280): error C2146: syntax error : missing ';' before identifier 'id' 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(280): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusimaging.h(280): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(384): error C2061: syntax error : identifier 'IStream' 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(395): error C2061: syntax error : identifier 'IStream' 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(405): error C2061: syntax error : identifier 'IStream' .....

 

 

순간 당황하여, 한참 삽질을 한 끝에 원인을 알아내었는데

MFC를 사용하지 않는 환경에서는 stdafx.h 에서 windows.h 를 포함시키는데 이런 식으로 한다.

 

#define WIN32_LEAN_AND_MEAN #include <windows.h>

 

WIN32_LEAN_AND_MEAN 를 정의하고 나서 windows.h 를 포함시키면 아래와 같은 내용이 빠지게 된다.

 

#include <cderr.h> #include <dde.h> #include <ddeml.h> #include <dlgs.h> #include <lzexpand.h> #include <mmsystem.h> #include <nb30.h> #include <rpc.h> #include <shellapi.h> #include <winperf.h> #include <winsock.h> #include <wincrypt.h> #include <winefs.h> #include <winscard.h> #include <winspool.h> #include <ole2.h> #include <commdlg.h>

 

문제는 여기에서 발생한다.

그렇다고 WIN32_LEAN_AND_MEAN를 막아버리기엔 쓰잘데기없는 기능들이 너무 많아진다.

하나씩 포함해 보면서 테스트해보면 알겠지만 저 중에서 ole2.h 하나만 있으면 해결된다.



출처: https://alexjeon1227.tistory.com/21?category=484908 [Fly me to the moon]