관리 되는 코드에서 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_OK 및 E_NOTIMPL, 및 Visual Studio HRESULT, 예를 들어, VS_E_INCOMPATIBLEDOCDATA 및 VS_E_UNSUPPORTEDFORMAT.VSConstants또한 제공의 Succeeded 및 Failed 메서드는 해당 하는 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 된 예외를 처리 인라인 이어야 합니다.