본문 바로가기
C++ 200제/코딩 IT 정보

HRESULT 0x00000000 : 윈도우 COM 함수 사용

by vicddory 2017. 4. 1.

HRESULT, 윈도우 COM 함수에서 대부분 사용


RESULT는 COM(Component Object Model)에서 사용되는 함수 대부분이 사용합니다. COM에서 HRESULT 사용을 강제하진 않지만, 일반적으로 호출된 함수가 정상적으로 사용이 되는지 그 여부를 가리는 용도로 자주 사용이 되고 있습니다. 32 bit 정수(Long)를 반환하며, Succeed와 Faield 매크로와 함께 사용됩니다.


HRESULT의 코드는 Severity, Facility, Information으로 구성이 되고 그 설명은 ESRI 사이트[클릭]에서 참조합니다.


Severity : 첫 번째 비트는 성공(1)이나 실패(0)를 나타냄

Information : 하위 16비트는 특정 오류 코드를 나타냄

Facility : 상위 16비트는 하위 16비트가 보유한 정보 이외의 것을 나타냄

HRESULT[윈도우 COM의 HRESULT에 대해서]


위의 사항을 요약하면 이렇습니다.


1. 상위 1bit가 1이라면 성공, 0이라면 실패.

2. 16~26bit까지 11비트 값은 카테고리를 의미하며,

3. 0~15bit까지 하위 WORD 값은 상세 정보를 의미합니다.


예를 들어, 아래와 같은 소스 코드를 통해서 HRESULT의 결과를 확인해 볼 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
#define SUCCEEDED (hr) (((HRESULT) (hr))> = 0)
# define FAILED (hr) (((HRESULT) (hr)) <0)HRESULT hr;
 
hr = function_example ();
 
if (hr & 0x80000000) {
    // 상위 1bit가 "1"이므로 성공
}
else {
    // 실패
}
cs


ps. 아래는 MDSN에서 제공하는 HRESULT의 주요 반환 값에 대한 설명입니다.


링크 - MSDN의 HRESULT 반환 값 (설명은 지식인 참조) [클릭]


반환값


S_OK(Operation successful(0x00000000))

 : 때때로 Boolean TRUE 값(0x0)으로 S_FAUL와 함께 사용되며 함수가 성공하였음을 의미


E_ABORT(Operation aborted(0x80004004))

 : 작동 정지


E_ACCESSDENIED(General access denied error(0x80070005))

 : 일반적 접근의 금지된 에러


E_FAIL(Unspecified failure(0x80004005))

 : 실행 실패


E_HANDLE(Handle that is not valid(0x80070006))

 : 적합하지 않은 처리


E_INVALIDARG(One or more arguments are not valid(0x80070057))

 : 하나 혹은 그 이상의 인자가 불분명


E_NOINTERFACE(No such interface supported(0x80004002))

 : 요청한 인터페이스를 미지원


E_NOTIMPL(Not implemented(0x80004001))

 : 멤버 함수에 구현 코드가 미포함


E_OUTOFMEMORY(Failed to allocate necessary memory(0x8007000E))

 : 필요한 메모리가 할당할 수 없음


E_POINTER(Pointer that is not valid(0x80004003))

 : 적합하지 않은 포인터


E_UNEXPECTED(Unexpected failure(0x8000FFFF))

 : 치명적인 실패를 의미


더 많은 반환 값 정보는 MSDN의 HRESULT Values[클릭]를 참조



댓글