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

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[클릭]를 참조.


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

이 글을 공유하기

댓글(0)

Designed by JB FACTORY