다음을 통해 공유


관리 되는 코드에서 HRESULT 정보

관리 되는 코드와 COM HRESULT 반환 값을 발생 하는 문제가 발생할 수 있습니다.

COM 인터페이스에서 HRESULT 반환 값이이 역할을 재생할 수 있습니다.

  • 오류 정보를 제공 (예를 들어, E_INVALIDARG).

  • 일반적인 프로그램 문제에 대 한 상태 정보를 제공 합니다.

관리 코드를 호출 하는 COM Hresult 이러한 문제가 발생할 수 있습니다.

  • HRESULT 값이 0 보다 (오류 코드)를 반환 하는 COM 함수 예외를 생성 합니다.

  • 예를 들어, 두 개 이상의 서로 다른 성공 코드를 정기적으로 방문 하는 COM 메서드 S_OK 또는 S_FALSE를 구분할 수 없습니다.

때문에 많은 수의 Visual Studio SDK HRESULT 값 보다 작으면 0으로 또는 다른 성공 코드를 반환 합니다. 반환 된 COM 함수는 Visual Studio SDK interop 어셈블리가 작성 메서드 시그니처를 유지. 모든 Visual Studio SDK interop 메서드는의 int 형식입니다. HRESULT 값 에서도 문제 없이 실행 하 고 예외를 생성 하지 않고 interop 계층을 통해 전달 됩니다.

COM 함수 호출 하는 관리 되는 메서드는 HRESULT 반환 하기 때문에 호출 하는 메서드는 HRESULT를 확인 하 고 필요에 따라 예외를 throw 해야 합니다.

COM에서 관리 되는 코드로 반환 처리 Hresult

관리 코드에서 COM 인터페이스를 호출 하면 HRESULT 값 검사 하 고 필요한 경우 예외를 throw 합니다. ErrorHandler 클래스가 포함의 ThrowOnFailure HRESULT의 값을 COM 예외를 throw 하는 메서드를 전달 합니다.

기본적으로 ThrowOnFailure 0 보다 작은 값을 갖는 HRESULT를 전달 될 때마다 예외를 throw 합니다. 이러한 Hresult 허용 되는 값 이며 예외는 throw 되지 해야 합니다 경우, 자세한 HRESULT의 값을 전달 해야 ThrowOnFailure 의 값을 테스트 한 다음. 테스트 하는 HRESULT에 명시적으로 전달 된 HRESULT 값 일치 하는 경우 ThrowOnFailure, 예외가 throw 되지 않습니다.

참고

VSConstants 클래스가 포함 상수 일반적인 HRESULT에 대 한 예를 들어, S_OKE_NOTIMPL, 및 Visual Studio HRESULT, 예를 들어, VS_E_INCOMPATIBLEDOCDATAVS_E_UNSUPPORTEDFORMAT.VSConstants또한 제공의 SucceededFailed 메서드는 해당 하는 Succeeded 메서드 및 Failed 매크로 com

예를 들어, 다음 함수 호출을 고려 E_NOTIMPL 반환 값 이지만 다른 HRESULT 오류 0 보다 작은 나타냅니다입니다.

Dim hr As Integer = MyInterface.MyFunction(cmdID)
ErrorHandler.ThrowOnFailure(hr, VSConstants.E_NOTIMPL)
int hr = MyInterface.MyFunction(cmdID);
ErrorHandler.ThrowOnFailure(hr, VSConstants.E_NOTIMPL);

없으면 하나 이상의 반환 값을 사용할 수 있는 HRESULT 값을 추가로 방금 목록에 대 한 호출을 추가할 수 있습니다 ThrowOnFailure.

Dim hr As Integer = MyInterface.MyFunction(cmdID)
ErrorHandler.ThrowOnFailure(hr, VSConstants.E_NOINTERFACE, VSConstants.E_NOTIMPL)
int hr = MyInterface.MyFunction(cmdID);
ErrorHandler.ThrowOnFailure(hr, VSConstants.E_NOINTERFACE, VSConstants.E_NOTIMPL);

COM에 관리 되는 코드에서 HRESULT를 반환

예외가 발생 하는 경우 관리 코드 반환 하는 S_OK 호출한 COM 함수입니다. COM interop는 관리 되는 코드를 강력 하 게 형식화 된 일반적인 예외 지원 합니다. 허용 되지 않는 받는 메서드에 예를 들어, null throw 인수는 ArgumentNullException.

예외를 throw 하는 확실 하지 않지만 HRESULT를 알고 있는 경우 COM에 사용할 수 있는 반환할는 ThrowExceptionForHR 메서드는 적절 한 예외를 throw 합니다. 예를 들어,이 비표준 오류 경우에 작동 VS_E_INCOMPATIBLEDOCDATA. ThrowExceptionForHRHRESULT에 매핑할 시도 강력한 형식의 예외를 전달 합니다. 불가능 한 경우, 대신 일반적인 COM 예외를 throw 합니다. 궁극적인 결과 전달 하면 하는 HRESULT입니다 ThrowExceptionForHR 에서 관리 되는 코드는 호출한 COM 함수에 반환 됩니다.

참고

예외 성능 손상 될 및 비정상적 상태를 나타내기 위한 것입니다.자주 발생 하는 경우 throw 된 예외를 처리 인라인 이어야 합니다.

참고 항목

작업

방법: HRESULT 및 예외 매핑

개념

상호 운용을 위한 COM 구성 요소 빌드

기타 리소스

관리 되는 VSPackages

비관리 코드와의 상호 운용

관리 되는 VSPackages