COM Interop 예외 처리

관리 코드 및 비관리 코드를 함께 사용하여 예외를 처리할 수 있습니다. 메서드가 관리 코드에서 예외를 throw하면 공용 언어 런타임은 HRESULT를 COM 개체로 전달할 수 있습니다. 메서드가 비관리 코드에서 오류 HRESULT를 반환하면서 실패하면 런타임에서는 관리 코드로 catch할 수 있는 예외를 throw합니다.

런타임에서는 COM interop의 HRESULT를 더 특정한 예외로 자동 매핑시킵니다. 예를 들어, E_ACCESSDENIED는 UnauthorizedAccessException이 되고, E_OUTOFMEMORY는 OutOfMemoryException이 되는 식입니다.

HRESULT가 사용자 지정 결과이거나 런타임에서 알 수 없는 것이면 런타임에서는 일반 COMException을 해당 클라이언트로 전달합니다. COMExceptionErrorCode 속성에는 HRESULT 값이 포함됩니다.

COM interop에 대한 자세한 내용은 고급 수준의 COM 상호 운용성을 참조하십시오.

IErrorInfo로 작업

오류가 COM에서 관리 코드로 전달되면 런타임에서는 예외 개체를 오류 정보로 채웁니다. IErrorInfo를 지원하고 HRESULTS를 반환하는 COM 개체는 이러한 정보를 관리 코드 예외로 보냅니다. 예를 들어, 런타임에서는 COM 오류의 설명을 예외의 Message 속성으로 매핑합니다. HRESULT에서 추가 오류 정보를 제공하지 않으면 런타임에서는 해당 예외의 대부분 속성을 기본값으로 채웁니다.

메서드가 비관리 코드에서 실패하면 예외가 관리 코드 세그먼트로 전달될 수 있습니다. HRESULT와 예외 항목에는 HRESULT가 런타임 예외 개체로 매핑되는 방법을 보여 주는 표가 있습니다.

참고 항목

개념

예외 처리 및 Throw

기타 리소스

고급 수준의 COM 상호 운용성