결과
HRESULT컴퓨터 프로그래밍 분야에서 HRESULT는 Windows 운영 체제 및 이전 IBM/Microsoft OS/2 운영 체제에서 오류 조건 및 경고 조건을 나타내기 위해 사용되는 데이터 유형입니다.
HRESULTS의 원래 목적은 OS/2 운영체제의 다른 서브시스템에 있는 에러코드 간의 충돌을 방지하기 위해 퍼블릭과 마이크로소프트의 내부사용을 위한 일련의 에러코드를 공식적으로 배치하는 것이었습니다.
HRESULT는 수치 에러 코드입니다.HRESULT 내의 다양한 비트는 에러 코드의 성질 및 에러 코드의 출처에 관한 정보를 부호화합니다.
HRESULT 오류 코드는 COM 프로그래밍에서 가장 많이 발생하며 표준 COM 오류 처리 규칙의 기반이 됩니다.
HRESULT 형식
HRESULT 값에는 중대도 코드, 퍼실리티 코드 및 오류 코드의 3가지 필드로 분할된32비트가 있습니다.중대도 코드는 반환값이 정보, 경고 또는 오류를 나타내는지 여부를 나타냅니다.퍼실리티 코드는 에러의 원인이 되는 시스템의 영역을 식별합니다.에러 코드는, 예외를 나타내기 위해서 할당되는 일의의 번호입니다.각 예외는 개별 HRESULT에 매핑됩니다.
퍼실리티는 퍼실리티 이름 또는 기타 식별 정보입니다.중대도는 1글자 S 또는E로 함수 호출이 성공했는지(S) 에러가 발생했는지(E)를 나타냅니다.Reason은 코드의 의미를 나타내는 식별자입니다.예를 들어 상태 코드 STG_E_FILENOTFOUND는 스토리지 관련 오류가 발생했음을 나타냅니다.특히 요청된 파일이 존재하지 않습니다.HRESULT 값은 부호 없는 16진수 값으로 표시될 수 있습니다.[1]
HRESULT는 다음과 [2]같이 구성됩니다.
조금 | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
들판 | S | R | C | N | X | 시설 | 코드 |
포맷 상세
- S - 중대도 - 성공/실패를 나타냅니다.
- 0 - 성공
- 1 - 장애
- R - 설비 코드의 예약된 부분으로 NT의 두 번째 심각도 비트에 해당합니다.
- 1 - 중대한 장애
- C - 고객.이 비트는 값이 고객 정의인지 Microsoft 정의인지를 지정합니다.
- 0 - Microsoft 정의
- 1 - 고객 정의
- N - 설비 코드의 예약된 부분.매핑된 NT 상태 값을 나타내기 위해 사용됩니다.
- X - 설비 코드의 예약된 부분.내부용으로 예약되어 있습니다.상태 값이 아닌 표시 문자열 메시지 ID인 HRESULT 값을 나타내기 위해 사용됩니다.
- 퍼실리티 - 에러의 원인이 되는 시스템서비스를 나타냅니다.퍼실리티 코드의 예를 다음에 나타냅니다(전체 리스트에 대해서는, 을 참조해 주세요.
- 코드 - 시설의 상태 코드입니다.
그 후 ITF 퍼실리티 코드는 COM 컴포넌트가 독자적인 컴포넌트 고유의 에러 코드를 정의할 수 있는 범위로 재활용되었습니다.
HRESULTS 구조
HRESULT는 함수로부터의 정상적인 복귀에는 0 또는 플러스, 장애에는 마이너스라고 정의되는 불투명한 결과 핸들입니다.일반적으로 함수가 성공하면S_OK
HRESULT 값(0과 동일).그러나 드물게 함수가 성공 코드를 추가 정보와 함께 반환할 수 있습니다. S_FALSE=0x01
.
HRESULTS가 표시될 때, 대부분의 경우 부호 없는 16진수 값으로 렌더링되며, 보통 HRESULTS는0x
프레픽스이 경우 16진수 그림 8 이상으로 시작하는 것으로 장애를 나타내는 숫자를 식별할 수 있다.
HRESULT는 원래 IBM/Microsoft OS/2 운영 체제에서 범용 오류 반환 코드로 정의되었으며, 이후 Windows NT에서 채택되었습니다. Microsoft Visual Basic은 HRESULT 오류 보고 메커니즘을 크게 확장했습니다.IErrorInfo
IErrorInfo COM 객체에 대한 포인터를 스레드 로컬 스토리지에 저장함으로써 HRESULT 오류 코드가 있는 객체.IErrorInfo 메커니즘에 의해 프로그램은 다양한 정보를 특정 HRESULT 오류와 관련지을 수 있습니다.예를 들어, 에러를 발생시킨 오브젝트의 클래스, 에러를 발생시킨 오브젝트의 인터페이스, 에러 텍스트, 및 도움말파일의 도움말토픽에의 링크입니다.또, HRESULT 에러의 리시버는, 온 디맨드로 에러 메시지의 현지화된 텍스트를 취득할 수 있습니다.
그 후 HRESULT 및 관련지어져 있는IErrorInfo
메커니즘은 COM에서 기본 오류 보고 메커니즘으로 사용되었습니다.
Windows 에서의 IErrorInfo 메카니즘의 서포트는 매우 일관성이 없습니다.오래된 윈도 API에서는 전혀 지원되지 않는 경향이 있으며 HRESULT가 반환됩니다.IErrorInfo
최신 Windows COM 서브시스템에서는 IErrorInfo 객체의 메시지 설명에 광범위한 오류 정보를 제공하는 경우가 많습니다.IErrorInfo 오류 메커니즘의 고급 기능(헬프 링크 및 온디맨드 현지화)은 거의 사용되지 않습니다.
에서.NET Framework, HRESULT/IERrorInfo 오류 코드는 네이티브에서 관리 대상 코드로 이행할 때 CLR 예외로 변환됩니다.CLR 예외는 관리 대상 COM 코드에서 네이티브 COM 코드로 이행할 때 HRESULT/IERrorInfo 오류 코드로 변환됩니다.
HRESULTS 사용
그winerror.h
file은 몇 가지 일반적인 HRESULT 값을 정의합니다.하드 코딩된 HRESULT 값은 특정 서브시스템과 관련된 헤더 파일(.h 파일)로 인코딩되는 경우가 있습니다.이러한 값은, Microsoft Windows Platforms SDK 또는 DDK 의 대응하는 헤더(.h) 파일에도 정의되어 있습니다.
HRESULT를 반환하는 콜이 성공했는지 여부를 확인하려면 S 필드가 0(즉, 번호가 음이 아님)인지 확인하거나 FAILED() 매크로를 사용합니다.HRESULT의 Code 부분을 가져오려면 HRESULT_CODE() 매크로를 사용합니다.ERR이라는 도구를 사용할 수도 있습니다.EXE: 값을 가져와 대응하는 에러 문자열로 변환합니다.ERRLOOK이라는 또 다른 도구입니다.EXE 를 사용하면, 소정의 HRESULT 값에 관련 붙여진 에러 문자열을 표시할 수도 있습니다.에러룩EXE는 Visual Studio 명령 프롬프트 내에서 실행할 수 있습니다.
Windows 네이티브SetErrorInfo
그리고.GetErrorInfo
API는 HRESULT 리턴 코드를 대응하는 코드와 관련짓기 위해 사용됩니다.IErrorInfo
물건.
FormatMessage API 함수를 사용하여 일부 비 IERrorInfo HRESULT를 사용자가 읽을 수 있는 문자열로 변환할 수 있습니다.
예
0x80070005
0x8
(실패).0x7
(Win32).0x5
- "E_FAULT"
0x80090032
0x8
(실패).0x9
(SSPI).0x32
-[3] "요구는 지원되지 않습니다"
레퍼런스
- ^ "Structure of COM Error Codes".
- ^ a b MSDN Windows 에러 코드 참조.2014년 9월 24일 참조 재검증
- ^ [1] Win32 에러 코드
외부 링크
- Microsoft Open Protocol 사양 - HRESULT 값
- Microsoft 개발자 네트워크 레퍼런스
- Windows 데이터 유형
- 매크로를 사용한 에러 처리
- DOS, Windows 및 OS/2 에러 코드 목록에는 일반적인 HRESULT 값이 다수 포함되어 있습니다.