COM 오류 코드의 구조

다음 그림에서는 HRESULT (또는 SCODE)의 형식을 보여 줍니다. 숫자는 비트 위치를 나타냅니다.

비트 위치를 나타내는 숫자가 있는 'H RESULT' 또는 'S CODE' 형식을 표시합니다.

HRESULT 또는 SCODE의 상위 비트는 반환 값이 성공 또는 실패를 나타내는지 여부를 나타냅니다. 0으로 설정하면 SEVERITY_SUCCESS 값은 성공을 나타냅니다. SEVERITY_ERROR 1로 설정하면 실패를 나타냅니다.

R, C, N 및 r 비트는 예약되어 있습니다.

시설 필드는 오류를 담당하는 시스템 서비스를 나타냅니다. Microsoft는 필요할 때 새 시설 코드를 할당합니다. 대부분의 SCODE 및 HRESULT 값은 기능 필드를 FACILITY_ITF 설정하여 인터페이스 메서드 오류를 나타냅니다.

일반적인 시설 필드는 다음 표에 설명되어 있습니다.

시설 필드 설명
FACILITY_DISPATCH
2
지연 바인딩 IDispatch 인터페이스 오류의 경우
FACILITY_ITF
4
대부분의 상태 코드는 인터페이스 메서드에서 반환됩니다. 오류의 실제 의미는 인터페이스에 의해 정의됩니다. 즉, 두 개의 서로 다른 인터페이스에서 반환된 정확히 동일한 32비트 값을 가진 두 HRESULT는 서로 다른 의미를 가질 수 있습니다.
FACILITY_NULL
0
S_OK 같은 광범위하게 적용 가능한 일반적인 상태 코드의 경우
FACILITY_RPC
1
원격 프로시저 호출에서 반환된 상태 코드의 경우
FACILITY_STORAGE
3
구조화된 스토리지와 관련된 IStorage 또는 IStream 메서드 호출에서 반환된 상태 코드의 경우 코드(하위 16비트) 값이 MS-DOS 오류 코드 범위(즉, 256 미만)에 있는 상태 코드는 해당 MS-DOS 오류와 동일한 의미를 갖습니다.
FACILITY_WIN32
7
Windows API의 함수에서 오류 코드를 HRESULT로 처리하는 방법을 제공하는 데 사용됩니다. 중복된 시스템 오류 코드가 FACILITY_WIN32 변경된 16비트 OLE의 오류 코드도 변경되었습니다.
FACILITY_WINDOWS
8
Microsoft 정의 인터페이스의 추가 오류 코드에 사용됩니다.

코드 필드는 오류 또는 경고를 나타내기 위해 할당된 고유 번호입니다.

규칙에 따라 HRESULT 값에는 일반적으로 Facility_Severity_Reason 형식의 이름이 있습니다.

시설은 시설 이름 또는 다른 고유 식별자입니다. 심각도 는 함수 호출이 성공(S)되었는지 또는 오류(E)를 생성했는지 여부를 나타내는 단일 문자 S 또는 E입니다. 및 Reason 는 코드의 의미를 설명하는 식별자입니다. 예를 들어 상태 코드 STG_E_FILENOTFOUND 스토리지 관련 오류가 발생했음을 나타냅니다. 특히 요청된 파일이 없습니다. FACILITY_NULL 상태 코드는 Facility_ 접두사를 생략합니다.

오류 코드는 인터페이스 구현의 컨텍스트 내에서 정의됩니다. 정의되면 성공 코드를 변경하거나 새 성공 코드를 추가할 수 없습니다. 그러나 새 오류 코드를 작성할 수 있습니다. Microsoft는 FACILITY_ITF 또는 새 기능에 설명된 인터페이스에 대해 새 실패 코드(성공 코드는 아님)를 정의할 수 있는 권한을 보유합니다.

COM에서 오류 처리

Windows 프로토콜: HRESULT