오류 처리 전략

인터페이스 메서드는 가상이므로 호출자가 하나의 호출에서 반환될 수 있는 전체 값 집합을 알 수 없습니다. 메서드의 한 구현은 5개의 값을 반환할 수 있습니다. 다른 8을 반환할 수 있습니다.

설명서에는 각 메서드에 대해 반환될 수 있는 일반 값이 나열됩니다. 이러한 값은 특별한 의미가 있으므로 코드에서 검사 처리해야 하는 값입니다. 다른 값은 반환될 수 있지만 의미가 없으므로 이를 처리하기 위해 특수 코드를 작성할 필요가 없습니다. 0 또는 0이 아닌 경우 간단한 검사 적합합니다.

HRESULT 값

COM 함수 및 메서드의 반환 값은 HRESULT입니다. 일부 HRESULT 값은 COM에서 변경되어 모든 중복 및 시스템 오류 코드와 겹치는 것을 제거합니다. 시스템 오류 코드를 중복하는 코드는 FACILITY_WIN32 변경되었으며 겹치는 코드는 FACILITY_NULL 유지됩니다. 일반적인 HRESULT 값 및 해당 값은 다음 표에 나와 있습니다.

HRESULT 설명
E_ABORT
0x80004004
지정되지 않은 오류로 인해 작업이 중단되었습니다.
E_ACCESSDENIED
0x80070005
일반적인 액세스 거부 오류입니다.
E_FAIL
0x80004005
지정되지 않은 오류가 발생했습니다.
E_HANDLE
0x80070006
잘못된 핸들이 사용되었습니다.
E_INVALIDARG
0x80070057
하나 이상의 인수가 잘못되었습니다.
E_NOINTERFACE
0x80004002
QueryInterface 메서드가 요청된 인터페이스를 인식하지 못했습니다. 인터페이스는 지원되지 않습니다.
E_NOTIMPL
0x80004001
메서드가 구현되지 않았습니다.
E_OUTOFMEMORY
0x8007000E
메서드가 필요한 메모리를 할당하지 못했습니다.
E_PENDING
0x8000000A
작업을 완료하는 데 필요한 데이터는 아직 사용할 수 없습니다.
E_POINTER
0x80004003
잘못된 포인터가 사용되었습니다.
E_UNEXPECTED
0x8000FFFF
치명적인 오류가 발생했습니다.
S_FALSE
0x00000001
메서드가 성공하고 부울 값 FALSE를 반환했습니다.
S_OK
0x00000000
메서드가 성공했습니다. 부울 반환 값이 필요한 경우 반환된 값은 TRUE입니다.

네트워크 오류

오류 코드의 처음 네 자리 숫자가 8007이면 시스템 또는 네트워크 오류를 나타냅니다. net 명령을 사용하여 이러한 유형의 오류를 디코딩할 수 있습니다. 오류를 디코딩하려면 먼저 16진수 오류 코드의 마지막 4자리를 10진수로 변환합니다. 그런 다음 명령 프롬프트에서 다음을 입력합니다. 여기서 10진수 코드는 디코딩하려는 반환 값으로 바뀝니다.

net helpmsg <decimal_code>

net 명령은 오류에 대한 설명을 반환합니다. 예를 들어 COM에서 오류 8007054B를 반환하는 경우 054B를 10진수(1355)로 변환합니다. 다음을 입력합니다.

net helpmsg 1355

net 명령은 "지정된 도메인이 없습니다"라는 오류 설명을 반환합니다.

COM에서 오류 처리