위 에러의 원인은...
DirectX 관련 라이브러리가 배포하는 basetsd.h 라는 파일 때문이다.
어떤 이유인지는 모르겠으나... DirectX 관련 라이브러리들 중 그들이 배포하는 basetsd.h 파일에는
POINTER_64 라는 키워드에 대한 define 이 빠져있기 때문이다.
에러가 발생하는 과정은....
windows.h 에서 winnt.h 를 include 하고, winnt.h 가 PVOID64 를 정의하기 위해
typedef void * POINTER_64 PVOID64;
위와같이 typedef 를 하는데 POINTER_64 키워드 정의를 찾기위해 basetsd.h 파일을 include 한다.
그런데, VisualStudio 등의 설치된 SDK의 include 에 있는 basetsd.h 에는 POINTER_64에 대한 정의가 있지만, '프로젝트 설정,C/C++, 일반' 의 '추가 포함 디렉터리' 란에 POINTER_64의 정의가 없는 basetsd.h 파일이 있는 디렉토리를 설정함으로 인해 위의 컴파일 에러가 발생하게 된다.
근본적인 해결책은,
POINTER_64 키워드에 대한 정의가 빠진 basetsd.h 파일을 include 하지 않도록 이 파일을 제거하거나, 만약 기어코 이 파일을 써야겠다면, 그 파일에 아래와 같은 정의를 포함해야 한다.
#if (_MSC_VER >= 1300) && !(defined(MIDL_PASS) || defined(RC_INVOKED))
#define POINTER_64 __ptr64
#else
#define POINTER_64
#endif
'MFC > Error' 카테고리의 다른 글
"There is no source code available for the current location" (0) | 2015.04.22 |
---|---|
Detected memory leaks! (0) | 2012.12.26 |
error C2236: unexpected 'class' (0) | 2012.12.26 |