COM을 사용하는 대부분의 함수들과 마찬기지로 CoInitializeEx() 함수는 HRESULT 값을 리턴한다. HRESULT는 함수의 호출 결과를 나타내는 32비트의 값을 표현하며 함수가 성공적으로 호출된 경우 S_OK를 리턴하는 등의 정보를 제공해준다.

 

다음의 표는 가장 많이 사용되는 HRESULT 에러 코드이다.

 

 에러코드

값 

설명 

 E_NOTIMPL

0x80004001L 

인터페이스의 메서드가 구현되지않음 

 E_OUTOFMEMORY

0x8007000EL

요청한 메모리를 할당하지 못함

 E_INVALIDARG

0x80070057L

인터페이스 메서드에 잘못된 인수가 옴

 E_NOINTERFACE

0x80004002L

요청한 인터페이스를 지원하지 않음

 E_ACCESSDENIED

0x80070005L

요청한 컴포넌트에 접근 할 수 없음

 S_OK

0x00000000L

성공적으로 호출 된 경우

 E_FAIL

0x80000000L

함수를 호출하는 중에 에러가 생길 경우

 

 

함수의 호출 결과를 검사하기 위해 다음과 같이 == 연산자를 사용하여 검사가 가능하다.

 

  HRESULT hr;

  hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

  if(hr != S_OK) // 만약 실패했다면

  {

    cout << "초기화 할 수 없습니다!" << endl;

    return 0;

  } 

 

또는 SUCCEEDED와 FAILED 매크로를 사용하여 함수 호출 결과를 검사할 수 있다.

 

   #define SUCCEEDED(hr)        ((HRESULT(hr)>=0)

   #define FAILED(hr)                  ((HRESULT(hr)<0)  

 

 

SUCCEEDED를 사용한 예

 

   HRESULT hr;

   hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

   if(!SUCCEEDED(hr))   // 만약 실패했다면

  {

     cout << "초기화 할 수 없습니다!" << endl;

     return 0;

  }

 

'COMPUTER TECH > COM' 카테고리의 다른 글

COM에서의 문자열 사용  (0) 2010.08.12
CLSIDFromProgID 함수  (0) 2010.08.12
HRESULT 에 대한 내용  (0) 2010.08.12
COM 라이브러리 초기화  (0) 2010.08.12
COM 클라이언트 애플리케이션 생성 과정  (0) 2010.08.12
.Net 컴포넌트 COM에서 사용하기  (0) 2010.08.12
Posted by ... XJAPAN

댓글을 달아 주세요