출처: https://alexjeon1227.tistory.com/21?category=484908
하지만 이대로 컴파일해보면 아래와 같은 에러메시지를 한참을 보게 된다.
(테스트환경은 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]
'Programming' 카테고리의 다른 글
Reference (Windows Script Host) (0) | 2020.04.08 |
---|---|
Microsoft Visual Studio All Versions ISO Download (0) | 2020.03.03 |
.NET Framework C# Compiler Path (0) | 2020.02.18 |
[Telegram] Bot Token 및 Chat Id 얻기 (0) | 2020.01.11 |
(C++) template variadic function (0) | 2019.12.23 |