오류 코드 해석
문제의 원본인 애플리케이션을 결정한 후에는 발생한 오류를 확인해야 합니다. 애플리케이션에서 사용하는 언어에 따라 오류가 발생하고 다양한 형식으로 보고됩니다.
Microsoft Visual C++ 성공, 경고 및 실패 값은 HRESULT라고 하는 32비트 숫자를 사용하여 반환됩니다. 시스템 정의 HRESULT 값 목록은 Windows SDK에 포함된 헤더 파일 Winerror.h를 참조하세요. 이 파일에는 모든 COM+ 오류 코드 및 설명이 포함됩니다. HRESULT 값에 대한 자세한 내용은 오류 처리를 참조하세요.
Java 언어에서는 comFailException 개체가 HRESULT를 지정하는 오류를 나타내기 위해 com.ms.com.ComFailException의 instance throw됩니다. com.ms.com.comSuccessException의 instance 반환 값이 False인 성공을 나타냅니다. 이러한 예외를 해석하는 방법에 대한 자세한 내용은 Microsoft Visual J++ 설명서를 참조하세요.
참고
VJ6 IDE에서 JIT 디버깅을 해제하지 않는 한 Visual J++ 개체를 호스팅하는 COM+ 애플리케이션 서버 프로세스는 활성 개체가 0인 경우에도 유휴 상태가 되지 않습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 Visual J++ 설명서를 참조하세요.
Visual Basic에서는 Err.Number 속성을 검사하여 HRESULT 값을 검색할 수 있습니다. 오류에 대한 설명은 Err.Description 속성을 사용하여 검색할 수 있습니다.
Microsoft Visual Studio에서 ERRLOOK 유틸리티를 사용하여 시스템 오류 메시지 또는 모듈 오류 메시지를 검색할 수도 있습니다. ERRLOOK는 Visual Studio 디버거 또는 다른 Automation 지원 애플리케이션에서 16진수 또는 10진수 값을 끌어서 놓으면 오류 메시지 텍스트를 자동으로 검색합니다. 값을 입력하거나 IDE 클립보드에서 붙여넣고 조회 옵션을 클릭하여 값을 입력할 수도 있습니다.
다음 C++ 메서드는 입력 HRESULT에 따라 오류에 대한 설명을 출력합니다.
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
void ErrorDescription(HRESULT hr)
{
if(FACILITY_WINDOWS == HRESULT_FACILITY(hr))
hr = HRESULT_CODE(hr);
TCHAR* szErrMsg;
if(FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&szErrMsg, 0, NULL) != 0)
{
_tprintf(TEXT("%s"), szErrMsg);
LocalFree(szErrMsg);
} else
_tprintf( TEXT("[Could not find a description for error # %#x.]\n"), hr);
}
다음 표에서는 COM+의 일반적인 오류 코드에 대한 설명을 제공합니다.
오류 코드 | 정의 |
---|---|
COMADMIN_E_ALREADYINSTALLED |
개체가 이미 등록되어 있습니다. |
COMADMIN_E_APP_FILE_READFAIL |
애플리케이션 파일을 읽는 동안 오류가 발생했습니다. |
COMADMIN_E_APP_FILE_VERSION |
애플리케이션 파일의 버전 번호가 잘못되었습니다. |
COMADMIN_E_APP_FILE_WRITEFAIL |
애플리케이션 파일에 쓰는 동안 오류가 발생했습니다. |
COMADMIN_E_APPDIRNOTFOUND |
애플리케이션 설치 디렉터리를 찾을 수 없습니다. |
COMQC_E_APPLICATION_NOT_QUEUED |
"큐"로 표시된 COM+ 애플리케이션만 "큐" 모니커를 사용하여 만들 수 있습니다. |
COMADMIN_E_APPLICATIONEXISTS |
애플리케이션이 이미 설치되어 있습니다. |
COMADMIN_E_APPLID_MATCHES_CLSID |
새 애플리케이션 ID와 동일한 GUID를 가진 CLSID가 이 컴퓨터에 이미 설치되어 있습니다. |
COMADMIN_E_APP_NOT_RUNNING |
지정된 애플리케이션이 현재 실행되고 있지 않습니다. |
COMADMIN_E_AUTHENTICATIONLEVEL |
업데이트 요청에 필요한 인증 수준을 설정할 수 없습니다. |
COMADMIN_E_BADPATH |
파일 경로가 잘못되었습니다. |
COMADMIN_E_BADREGISTRYLIBID |
등록된 형식 라이브러리 ID가 잘못되었습니다. |
COMADMIN_E_BADREGISTRYPROGID |
구성 요소의 ProgID가 없거나 손상되었습니다. |
COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY |
애플리케이션 프록시를 내보낼 수 없습니다. |
COMADMIN_E_CAN_NOT_START_APP |
라이브러리 애플리케이션 또는 애플리케이션 프록시이므로 애플리케이션을 시작하지 못했습니다. |
COMADMIN_E_CAN_NOT_EXPORT_SYS_APP |
시스템 애플리케이션을 내보낼 수 없습니다. |
COMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT |
구성 요소를 가져왔을 수 있으므로 사용자가 이 구성 요소를 구독할 수 없습니다. |
COMADMIN_E_CANTCOPYFILE |
파일을 복사하는 동안 오류가 발생했습니다. |
COMADMIN_E_CLSIDORIIDMISMATCH |
애플리케이션 파일 CLSID 또는 IID는 해당 DLL과 일치하지 않습니다. |
COMADMIN_E_COMP_MOVE_BAD_DEST |
대상 애플리케이션이 더 이상 존재하지 않으므로 구성 요소 이동에 실패했습니다. |
COMADMIN_E_COMP_MOVE_LOCKED |
원본 또는 대상 애플리케이션이 시스템 애플리케이션이거나 현재 변경 내용에 대해 잠겨 있으므로 구성 요소 이동이 허용되지 않았습니다. |
COMADMIN_E_COMPFILE_BADTLB |
형식 라이브러리를 로드할 수 없습니다. |
COMADMIN_E_COMPFILE_CLASSNOTAVAIL |
DLL은 형식 라이브러리에 나열된 구성 요소를 지원하지 않습니다. |
COMADMIN_E_COMPFILE_DOESNOTEXIST |
이 파일이 없습니다. |
COMADMIN_E_COMPFILE_GETCLASSOBJ |
DLL에서 GetClassObject 메서드가 실패했습니다. |
COMADMIN_E_COMPFILE_LOADDLLFAIL |
DLL을 로드할 수 없습니다. |
COMADMIN_E_COMPFILE_NOREGISTRAR |
이 파일에서 참조되는 구성 요소 등록자를 사용할 수 없습니다. |
COMADMIN_E_COMPFILE_NOTINSTALLABLE |
파일에는 구성 요소 또는 구성 요소 정보가 포함되어 있지 않습니다. |
COMADMIN_E_COREQCOMPINSTALLED |
동일한 DLL의 구성 요소가 이미 설치되어 있습니다. |
COMADMIN_E_DLLLOADFAILED |
DLL을 로드할 수 없습니다. |
COMADMIN_E_DLLREGISTERSERVER |
구성 요소가 설치되었을 때 DllRegisterServer 함수가 실패했습니다. |
COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER |
이벤트 클래스는 구독자 구성 요소로 구성할 수 없습니다. 이벤트 클래스를 구독자로 사용하여 구독을 만들려고 하면 이 오류가 반환됩니다. |
COMADMIN_E_INVALIDUSERIDS |
애플리케이션 파일에서 하나 이상의 사용자가 유효하지 않습니다. |
COMADMIN_E_KEYMISSING |
카탈로그에서 개체를 찾을 수 없습니다. |
COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE |
라이브러리 애플리케이션 및 애플리케이션 프록시는 호환되지 않습니다. 이 오류는 애플리케이션 프록시를 내보내려고 시도하고 애플리케이션의 활성화 속성이 라이브러리인 경우 반환됩니다. |
COMADMIN_E_NOREGISTRYCLSID |
구성 요소의 CLSID가 없거나 손상되었습니다. |
COMADMIN_E_NOSERVERSHARE |
사용할 수 있는 서버 파일 공유가 없습니다. |
COMADMIN_E_NOTCHANGEABLE |
이 개체 및 해당 하위 개체에 대한 변경 내용을 사용하지 않도록 설정했습니다. |
COMADMIN_E_NOTDELETEABLE |
이 개체에 대해 delete 함수를 사용하지 않도록 설정했습니다. |
COMADMIN_E_NOTINREGISTRY |
레지스트리에서 개체를 찾을 수 없습니다. |
COMADMIN_E_NOUSER |
하나 이상의 사용자가 유효하지 않습니다. |
COMADMIN_E_OBJECT_DOES_NOT_EXIST |
지정된 개체 중 하나를 찾을 수 없습니다. |
COMADMIN_E_OBJECT_PARENT_MISSING |
삽입되거나 업데이트되는 개체 중 하나가 유효한 부모 컬렉션에 속하지 않습니다. |
COMADMIN_E_OBJECTERRORS |
하나 이상의 개체에 액세스하는 동안 오류가 발생했습니다. 자세한 내용은 ErrorInfo 컬렉션을 참조하세요. |
COMADMIN_E_OBJECTEXISTS |
추가하거나 이름을 바꾸려는 개체가 이미 있습니다. |
COMADMIN_E_OBJECTINVALID |
개체의 속성 중 하나 이상이 없거나 잘못되었습니다. |
COMADMIN_E_OBJECTNOTPOOLABLE |
이 개체는 풀될 수 없습니다. |
COMADMIN_E_PROPERTYSAVEFAILED |
하나 이상의 속성 설정이 잘못되었거나 서로 충돌합니다. |
COMADMIN_E_PROPERTY_OVERFLOW |
속성 값이 너무 큽니다. |
COMADMIN_E_REGFILE_CORRUPT |
등록 파일이 손상되었습니다. |
COMADMIN_E_REGISTERTLB |
시스템에서 형식 라이브러리를 등록할 수 없습니다. |
COMADMIN_E_REGISTRARFAILED |
구성 요소 등록 기관에서 오류가 발생했습니다. |
COMADMIN_E_REMOTEINTERFACE |
인터페이스 정보가 누락되었거나 변경되었습니다. |
COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM |
이 작업은 이 플랫폼에서 사용하도록 설정되지 않습니다. |
COMADMIN_E_ROLE_DOES_NOT_EXIST |
구성 요소, 인터페이스 또는 메서드에 할당된 역할이 애플리케이션에 없습니다. |
COMADMIN_E_ROLEEXISTS |
역할이 이미 있습니다. |
COMADMIN_E_SERVICENOTINSTALLED |
서비스가 설치되지 않았습니다. |
COMADMIN_E_SESSION |
서버 카탈로그 버전은 지원되지 않습니다. |
COMADMIN_S_SOMEALREADYPAUSED |
지정된 애플리케이션 프로세스 중 하나 이상이 이미 일시 중지되었습니다. |
COMADMIN_S_SOMEALREADYRUNNING |
지정된 애플리케이션 프로세스 중 하나 이상이 이미 실행 중입니다. |
COMADMIN_E_START_APP_NEEDS_COMPONENTS |
애플리케이션을 시작하려면 애플리케이션에 구성 요소가 있어야 합니다. |
COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE |
NT 서비스로 실행되는 COM+ 애플리케이션은 풀 또는 재활용으로 표시되지 않을 수 있습니다. |
COMADMIN_E_SYSTEMAPP |
이 작업은 시스템 애플리케이션에서 수행할 수 없습니다. |
COMADMIN_E_USER_IN_SET |
하나 이상의 사용자가 이미 로컬 파티션 집합에 할당되어 있습니다. |
COMADMIN_E_USERPASSWDNOTVALID |
애플리케이션에서 설정된 ID 또는 암호가 잘못되었습니다. |