System.Runtime.InteropServices.COMException 클래스

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

클래스는 COMException COM 메서드 호출에서 인식할 수 없는 HRESULT가 반환될 때 throw되는 예외입니다.

공용 언어 런타임은 잘 알려진 HRESULT를 .NET 예외로 변환하여 COM 개체가 관리되는 클라이언트에 의미 있는 오류 정보를 반환할 수 있도록 합니다. HRESULT-예외 매핑은 특정 HRESULT를 관리되지 않는 클라이언트에 반환하여 다른 방향으로도 작동합니다. 매핑 세부 정보는 HRESULT 및 예외를 매핑하는 방법을 참조 하세요.

런타임에서 익숙하지 않은 HRESULT(특정 예외가 없는 HRESULT)가 발생하면 클래스의 인스턴스가 COMException throw됩니다. 이 모든 용도의 예외는 예외와 동일한 멤버를 노출하고 호출 수신자가 반환한 HRESULT를 포함하는 공용 ErrorCode 속성을 상속합니다. 런타임에 오류 메시지를 사용할 수 있는 경우( IErrorInfo 인터페이스 또는 Visual Basic의 Err 개체 또는 운영 체제에서 가져온 경우) 메시지가 호출자에게 반환됩니다. 그러나 COM 구성 요소 개발자가 오류 메시지를 포함하지 않은 경우에는 런타임에서 메시지 문자열 대신 8자리 숫자로 구성된 HRESULT를 반환합니다. HRESULT를 사용하면 호출자가 제네릭 예외의 원인을 확인할 수 있습니다.

COMException 예외 처리

다음은 예외 문제를 해결하기 위한 몇 가지 고려 사항입니다 COMException .

ErrorCode 런타임이 익숙하지 않은 HRESULT를 발견하여 예외 ErrorCodeCOMException throw하면 속성에 오류 메시지가 포함되거나 오류 메시지를 사용할 수 없는 경우 8자리 HRESULT 값이 포함됩니다. 오류 메시지 또는 HRESULT 값은 예외의 원인을 확인하는 데 도움이 될 수 있습니다.

HRESULT 값 목록은 공통 HRESULT 값을 참조 하세요.

Microsoft Office 개체의 메서드에 런타임에 바인딩된 인수를 전달하는 경우 개체가 COMException COM 개체일 때 예외가 throw될 수 있습니다. 런타임 바인더에서는 이러한 메서드 호출에 ByRef 매개 변수가 사용되는 것으로 간주하고 사용자가 전달한 속성에 set 접근자가 있는 것으로 간주합니다. 속성이 없는 경우 .NET은 예외(CORE_E_MISSINGMETHODHRESULT 포함)를 생성합니다MissingMethodException. 이 문제를 해결하려면 초기 바인딩 개체를 사용하거나 개체의 속성 대신 변수를 전달합니다.

COM은 Visual Studio와 호스팅 프로세스 간에 통신하는 데 사용됩니다. 코드가 실행되기 전에 사용되므로 CoInitializeSecurity호출하면 이 예외가 throw됩니다. 경우에 따라 Visual Studio를 관리istrator로 실행하면 문제가 해결될 수 있습니다. 호스팅 프로세스를 사용하지 않도록 설정할 수도 있습니다.

COMException 예외 throw

클래스를 COMException 사용하여 관리되지 않는 클라이언트에 특정 HRESULT를 반환할 수 있지만 특정 .NET 예외를 throw하는 것이 제네릭 예외를 사용하는 것보다 낫습니다. 관리되는 클라이언트와 관리되지 않는 클라이언트는 .NET 개체를 사용할 수 있으며, 관리되는 호출자에게 HRESULT를 throw하는 것은 예외를 throw하는 것보다 덜 이해할 수 있습니다.