이 문서는 이 API에 대한 참조 설명서를 보충하는 추가 설명을 제공합니다.
COMException 클래스는 COM 메서드 호출에서 인식할 수 없는 HRESULT가 반환될 때 throw되는 예외입니다.
공용 언어 런타임은 잘 알려진 HRESULT를 .NET 예외로 변환하여 COM 개체가 관리되는 클라이언트에 의미 있는 오류 정보를 반환할 수 있도록 합니다. HRESULT-예외 매핑은 특정 HRESULT를 관리되지 않는 클라이언트에 반환하여 다른 방향으로도 작동합니다. 매핑 세부 정보는 HRESULT 및 예외를 매핑하는 방법을 참조하세요.
런타임이 익숙하지 않은 HRESULT(특정 예외가 없는 HRESULT)를 만나면 COMException 클래스의 인스턴스가 던져집니다. 이 모든 용도의 예외는 예외와 동일한 멤버를 노출하고 호출 수신자가 반환한 HRESULT를 포함하는 공용 ErrorCode 속성을 상속합니다. 런타임에 오류 메시지를 사용할 수 있는 경우( IErrorInfo 인터페이스 또는 Visual Basic의 Err
개체 또는 운영 체제에서 가져온 경우) 메시지가 호출자에게 반환됩니다. 그러나 COM 구성 요소 개발자가 오류 메시지를 포함하지 못하는 경우 런타임은 메시지 문자열 대신 8자리 HRESULT를 반환합니다. HRESULT를 사용하면 호출자가 제네릭 예외의 원인을 확인할 수 있습니다.
COMException 예외 처리
다음은 예외 문제를 해결하기 위한 몇 가지 고려 사항입니다 COMException .
ErrorCode 속성을 확인하십시오. 런타임이 익숙하지 않은 HRESULT를 발견하여 COMException 예외를 throw하면, ErrorCode 속성에는 오류 메시지가 포함되거나, 오류 메시지를 사용할 수 없는 경우 8자리 HRESULT 값이 포함됩니다. 오류 메시지 또는 HRESULT 값은 예외의 원인을 확인하는 데 도움이 될 수 있습니다.
HRESULT 값 목록은 공통 HRESULT 값을 참조하세요.
Microsoft Office 개체의 메서드에 늦게 바인딩된 인수를 전달하는 경우 해당 개체가 COMException COM 개체인 경우 예외가 발생할 수 있습니다. 지연 바인더는 이러한 메서드 호출에 ByRef
매개 변수가 포함되며, 전달하는 속성에 set
접근자가 있다고 가정합니다. 속성이 없는 경우 .NET은 예외(MissingMethodExceptionHRESULT 포함)를 생성합니다CORE_E_MISSINGMETHOD
. 이 동작을 해결하려면 초기 바인딩된 개체를 사용하거나 개체의 속성 대신 변수를 전달합니다.
COM은 Visual Studio와 호스팅 프로세스 간에 통신하는 데 사용됩니다. 코드가 실행되기 전에 사용되므로 CoInitializeSecurity 를 호출하면 이 예외가 throw됩니다. 경우에 따라 Visual Studio를 관리자로 실행하면 문제가 해결될 수 있습니다. 호스팅 프로세스를 사용하지 않도록 설정할 수도 있습니다.
COMException 예외를 던지다
클래스를 COMException 사용하여 관리되지 않는 클라이언트에 특정 HRESULT를 반환할 수 있지만 특정 .NET 예외를 throw하는 것이 제네릭 예외를 사용하는 것보다 낫습니다. 관리되는 클라이언트와 관리되지 않는 클라이언트가 모두 .NET 객체를 사용할 수 있다고 생각하면, 관리되는 호출자에게 HRESULT를 던지는 것은 예외를 던지는 것만큼 명확하지 않습니다.
.NET