나의 해결책

#ifndef POINTER_64
#define POINTER_64
#endif

typedef void *PVOID;
typedef void * POINTER_64 PVOID64;




------------- 스크랩 1 -------------
POINTER_64가 정의되지 않아서 생기는 에러인 듯하다.
winnt.h에 다음 한 줄을 추가하면 해결된다.

#define POINTER_64 __ptr64 // 추가
typedef void *PVOID;
typedef void * POINTER_64 PVOID64; 

그 외 잡다한 변수선언 관련 컴파일에러들은 Microsoft가 지키지 않던 C++ scope 관련 표준들을 최근에 와서 지킴으로써 발생하는 것들이 많아보인다.
무조건 선언해주도록 하자. -_-

몇 번 씩 당했던 문제들이지만 그 솔루션을 외우고 있지는 않고... 다행인 것은 다시 구글에서 찾는 시간이 매번 조금씩 짧아져간다는 것이다. ㅜㅜ

결국 DirectShow 관련 일은 개발환경 세팅이 반이라는 결론에 다다른다 (뭐 다른 일들도 크게 다르지 않지만).



[2009.2.24 또 당해서 추가함]
VS2005에서 Microsoft DirectX 9.0 SDK (February 2005) 설치 후 BaseClasses 컴파일 시 ctlutil.h에서 C4430 default int 문제가 발생함 - 이것은 각개 격파해야 하는 문제이나, 지난 번의 "C4430 = winnt.h 수정" 학습효과 때문에 한참 헤매다 결국 약 30분 간 의식을 잃음. 다음과 같이 각개 격파하자!

(ctlutil.h)
COARefTime(LONG);
operator=(LONG); // C4430
(LONG)operator = (LONG);

(wxdebug.cpp)
//static g_dwLastRefresh = 0; C4430
static DWORD g_dwLastRefresh = 0;

(outputq.cpp)
//for (long iDone = 0; C2065
long iDone;
for(iDone = 0;

(winutil.cpp)
int Count; // C2065
for (Count = 0;Count < Result;Count++) { // C2065




------------- 스크랩 2 -------------
위 에러의 원인은...

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

이것이 해결책.


------------- 스크랩 3 -------------

vs 2005에서 나오는 문제임.

 

문제 :

winnt.h 에서

typedef void * POINTER_64 PVOID64; 을 컴파일할때

          error C2146: 구문 오류 : ';'이(가) 'PVOID64' 식별자 앞에 없습니다.

에러가 뜸.

 

원인 :

 POINTER_64 가 basestd.h 에서 정의되지 못하는 문제.

 

해결책 :

  주의. 64bit 환경일때는 테스트 못해 봄

 

  1. winnt.h 를 수정하는 방법

 

        #define POINTER_64    // 추가

        typedef void *PVOID;
        typedef void * POINTER_64 PVOID64;

 

  2. stdafx.h 에서 다른 파일을 include 하기 전에 define 을 추가

 

        #define POINTER_64    // 추가

        #include ...




 
 
 

+ Recent posts