COM 相互運用の例外の処理Handling COM Interop Exceptions

マネージド コードとアンマネージド コードは、例外を処理するために一緒に操作できます。Managed and unmanaged code can work together to handle exceptions. マネージド コードでメソッドが例外をスローすると、共通言語ランタイムは、HRESULT を COM オブジェクトに渡すことができます。If a method throws an exception in managed code, the common language runtime can pass an HRESULT to a COM object. アンマネージド コードでメソッドが失敗して、失敗を示す HRESULT を返した場合、ランタイムはマネージド コードでキャッチできる例外をスローします。If a method fails in unmanaged code by returning a failure HRESULT, the runtime throws an exception that can be caught by managed code.

ランタイムは、HRESULT を COM 相互運用からの自動的にマップして、より詳細な例外を取得します。The runtime automatically maps the HRESULT from COM interop to more specific exceptions. たとえば、E_ACCESSDENIED は UnauthorizedAccessException になり、E_OUTOFMEMORY は OutOfMemoryException になるなどです。For example, E_ACCESSDENIED becomes UnauthorizedAccessException, E_OUTOFMEMORY becomes OutOfMemoryException, and so on.

HRESULT がカスタムの結果であるか、またはランタイムで不明な場合は、ランタイムがジェネリック COMException をクライアントに渡します。If the HRESULT is a custom result or if it is unknown to the runtime, the runtime passes a generic COMException to the client. COMExceptionErrorCode プロパティには、HRESULT 値が含まれます。The ErrorCode property of the COMException contains the HRESULT value.

IErrorInfo の処理Working with IErrorInfo

エラーが COM からマネージド コードに渡された場合、ランタイムは例外オブジェクトにエラー情報を入れます。When an error is passed from COM to managed code, the runtime populates the exception object with error information. IErrorInfo をサポートして HRESULT を返す COM オブジェクトは、この情報をマネージド コードの例外に提供します。COM objects that support IErrorInfo and return HRESULTS provide this information to managed code exceptions. たとえば、ランタイムは、COM エラーからの説明を例外の Message プロパティにマップします。For example, the runtime maps the Description from the COM error to the exception's Message property. HRESULT が追加のエラー情報を提供しない場合、ランタイムは例外のプロパティの多くに既定値を指定します。If the HRESULT provides no additional error information, the runtime fills many of the exception's properties with default values.

アンマネージド コードでメソッドが失敗した場合、例外をマネージド コードのセグメントに渡すことができます。If a method fails in unmanaged code, an exception can be passed to a managed code segment. HRESULT と例外」のトピックには、HRESULT がランタイム例外オブジェクトにマップする方法を示す表が含まれています。The topic HRESULTS and Exceptions contains a table showing how HRESULTS map to runtime exception objects.

参照See also