본문 바로가기

오래된 흔적/Visual Studio.NET

CoInitializeEx 컴파일 에러

* 에러내용 
error C2065: 'CoInitializeEx' : undeclared identifier <= 요렇게 났다.

CoInitializeEx 정의로 이동이 됐다. <= 정의되어 있는 ObjBase.h파일을 읽을 수 있다는 얘기였다. 

근데 또 컴파일이 안됐다. 프로젝트 셋팅에 Program Files\Microsoft Platform SDK\Include 폴더가 참조되고 있었다.

이해할 수 없었다. 구글링과 네이버질을 해 봤다. 비슷한 사람들이 있더라. 

(네이버 찾아본 예)
  CoInitializeEx 컴파일 에러
  에러맨      Date : 06-03-08 15:38     Hit : 638    
  트랙백 주소 : http://www.tipssoft.com/bulletin/tb.php/QnA/567
컴파일하면 아래 부분에서 에러가 납니다. 

CoInitializeEx(NULL, COINIT_MULTITHREADED); 

에러내용 
error C2065: 'CoInitializeEx' : undeclared identifier 

MSDN에 나와 있는데로 header파일과 library를 다 추가시켜줬는데도 이상하게 컴파일 에러가 납니다. 
CoInitialize로 하면 에러는 나지 않지만 multithread지원(OLE) 때문에 어쩔수 없이 CoInitializeEx를 써야 합니다. 
왜 이런 에러가 날까요? 

Header: Declared in objbase.h. 
Library: Use ole32.lib.

관리자   08-07-08 14:06
Date : 06-03-09 14:08    

안녕하세요.. 

CoInitialize로 하면 에러는 나지 않지만 CoInitializeEx 함수를 사용할때 오류가 난다면 거의 
버전문제일것 같습니다. objbase.h 라는 헤더파일을 살펴보면 CoInitializeEx 함수 선언부에 
다음과 같이 되어 있습니다. 

#if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM 
WINOLEAPI  CoInitializeEx(LPVOID pvReserved, DWORD dwCoInit); 
#endif // DCOM 

즉, 윈도우즈 버전과 DCOM 지원 둘중에 하나는 만족해야지 CoInitializeEx 함수를 사용할수 
있다는 내용입니다. 현재 사용하시는 윈도우즈 버전이 위 버전에 만족하시는지 확인하시기 
바랍니다.. 

그럼, 즐거운 하루되세요..

=> 분명히 _WIN32_WINNT 0x0500으로 나오더라. #if문도 활성화 블록으로 되어 있었다. 그래도 안됐다. -_ㅜ

(구글 검색한 예)

_WIN32_WINNT < 0x0400 on my Win XP Pro SP2

Joachi posted on 2007년 1월 29일 월요일 오전 3:51

According to

http://msdn2.microsoft.com/en-us/library/aa383745.aspx

Win XP should have ver nr 0x0501 which is more than 0x0400 which is supposed
to correspond to Win NT4. However, on my Win XP SP2 PC within VS 2003 in a
C++ app,


returns false. Why is that?
reply

_WIN32_WINNT < 0x0400 on my Win XP Pro SP2

David Lowndes posted on 2007년 1월 29일 월요일 오전 4:03

The setting of _WIN32_WINNT has nothing to do with the machine you're
using. It's just a preprocessor symbol, you can set it to what you
need in your project preprocessor settings or a header or source file.

Dave

=> 지랄..  괜히 preprocessor symbol 바꿔보는 짓 했다.. -_ㅜ

혹시나 해서 설치된 폴더를 검색해 봤다. 

아뿔싸!!!

Program Files\Microsoft Platform SDK랑 그 아래에 Program Files\Microsoft SDKs가 있었다. 

뭔가 희망이 보였다. 

당장 Program Files\Microsoft SDKs로 바꿔서 컴파일 해 보니 되더라.. 

그래서 찾아봤다. 뭔 차이점이 있는지.. 위키피디아에 있더라.. 떡하니.. -_-;; 

Starting with Windows Vista, the Platform SDK has been replaced by the Windows SDK..
Starting with Windows Vista, the Platform SDK has been replaced by the Windows SDK..
Starting with Windows Vista, the Platform SDK has been replaced by the Windows SDK..
Starting with Windows Vista, the Platform SDK has been replaced by the Windows SDK..

ㅎㄷㄷ

'오래된 흔적 > Visual Studio.NET' 카테고리의 다른 글

함수형 언어 F#  (0) 2009.11.30
_MSC_VER (Visual C++ 컴파일러 버젼)  (0) 2009.11.27
_WIN32_WINNT 윈도우 버젼 값  (0) 2009.11.27
Inno Setup  (0) 2009.11.26
Installer 이야기  (0) 2009.11.17