COM 相互運用の例外の処理

マネージド コードとアンマネージド コードは、例外を処理するために一緒に操作できます。 マネージド コードでメソッドが例外をスローすると、共通言語ランタイムは、HRESULT を COM オブジェクトに渡すことができます。 アンマネージド コードでメソッドが失敗して、失敗を示す HRESULT を返した場合、ランタイムはマネージド コードでキャッチできる例外をスローします。

ランタイムは、HRESULT を COM 相互運用からの自動的にマップして、より詳細な例外を取得します。 たとえば、E_ACCESSDENIED は UnauthorizedAccessException になり、E_OUTOFMEMORY は OutOfMemoryException になるなどです。

HRESULT がカスタムの結果であるか、またはランタイムで不明な場合は、ランタイムがジェネリック COMException をクライアントに渡します。 COMExceptionErrorCode プロパティには、HRESULT 値が含まれます。

IErrorInfo の処理

エラーが COM からマネージド コードに渡された場合、ランタイムは例外オブジェクトにエラー情報を入れます。 IErrorInfo をサポートして HRESULT を返す COM オブジェクトは、この情報をマネージド コードの例外に提供します。 たとえば、ランタイムは、COM エラーからの説明を例外の Message プロパティにマップします。 HRESULT が追加のエラー情報を提供しない場合、ランタイムは例外のプロパティの多くに既定値を指定します。

アンマネージド コードでメソッドが失敗した場合、例外をマネージド コードのセグメントに渡すことができます。 「HRESULT と例外」のトピックには、HRESULT がランタイム例外オブジェクトにマップする方法を示す表が含まれています。

関連項目