티스토리 뷰
목차
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비트가 보유한 정보 이외의 것을 나타냄
[윈도우 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[클릭]를 참조