오류 처리 전략
인터페이스 메서드는 가상이므로 호출자가 하나의 호출에서 반환될 수 있는 전체 값 집합을 알 수 없습니다. 메서드의 한 구현은 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 명령은 "지정된 도메인이 없습니다"라는 오류 설명을 반환합니다.