COM 오류 코드의 구조
다음 그림에서는 HRESULT(또는 SCODE)의 형식을 보여 줍니다. 숫자는 비트 위치를 나타냅니다.
HRESULT 또는 SCODE의 상위 비트는 반환 값이 성공 또는 실패를 나타내는지 여부를 나타냅니다. SEVERITY_SUCCESS 0으로 설정하면 값이 성공을 나타냅니다. SEVERITY_ERROR 1로 설정하면 실패를 나타냅니다.
R, C, N 및 r 비트는 예약되어 있습니다.
시설 필드는 오류를 담당하는 시스템 서비스를 나타냅니다. Microsoft는 필요에 따라 새 시설 코드를 할당합니다. 대부분의 SCODE 및 HRESULT 값은 기능 필드를 FACILITY_ITF 설정하여 인터페이스 메서드 오류를 나타냅니다.
공용 시설 필드는 다음 표에 설명되어 있습니다.
시설 필드 | 값 (또는 가치, depending on context) | 설명 |
---|---|---|
시설 배차 |
2 |
지연 바인딩의 IDispatch 인터페이스 오류가 발생한 경우 |
FACILITY_ITF |
4 |
대부분의 상태 코드는 인터페이스 메서드에서 반환됩니다. 오류의 실제 의미는 인터페이스에 의해 정의됩니다. 즉, 두 인터페이스에서 각각 반환된 32비트 값이 정확히 동일한 두 HRESULT의 의미가 서로 다를 수 있습니다. |
시설_NULL |
0 |
S_OK 같은 광범위하게 적용되는 일반적인 상태 코드의 경우 |
FACILITY_RPC |
1 |
원격 프로시저 호출에서 반환된 상태 코드의 경우 |
시설 보관 |
3 |
구조적 스토리지와 관련된 메서드 호출에 의해 반환된 상태 코드는 IStorage 또는 IStream에 해당합니다. 코드(하위 16비트) 값이 MS-DOS 오류 코드 범위(즉, 256보다 작음)에 있는 상태 코드는 해당 MS-DOS 오류와 동일한 의미를 갖습니다. |
FACILITY_WIN32 (윈도우 32 시설) |
7 |
Windows API의 함수에서 오류 코드를 처리하기 위한 수단으로 HRESULT가 사용됩니다. 16비트 OLE의 시스템 오류 코드를 중복하는 오류 코드가 FACILITY_WIN32로 변경되었습니다. |
시설_창문 |
8 |
Microsoft 정의 인터페이스의 추가 오류 코드에 사용됩니다. |
코드 필드는 오류 또는 경고를 나타내기 위해 할당된 고유 번호입니다.
규칙에 따라 HRESULT 값에는 일반적으로 Facility_심각도_이유형식의 이름이 있습니다.
시설 시설 이름 또는 기타 고유 식별자입니다. 심각도 함수 호출이 성공했는지(S) 또는 오류(E)를 생성했는지 여부를 나타내는 단일 문자 S 또는 E입니다. 및 이유 코드의 의미를 설명하는 식별자입니다. 예를 들어 상태 코드 STG_E_FILENOTFOUND 스토리지 관련 오류가 발생했음을 나타냅니다. 특히 요청된 파일이 없습니다. FACILITY_NULL 상태 코드는 Facility_ 접두사를 생략합니다.
오류 코드는 인터페이스 구현의 컨텍스트 내에서 정의됩니다. 정의되면 성공 코드를 변경하거나 새 성공 코드를 추가할 수 없습니다. 그러나 새 오류 코드를 작성할 수 있습니다. Microsoft는 FACILITY_ITF 또는 새 기능에 설명된 인터페이스에 대한 새 실패 코드(성공 코드는 아님)를 정의할 권리를 보유합니다.