COM 相互運用の例外の処理
更新 : 2007 年 11 月
例外を処理するために、マネージ コードとアンマネージ コードを組み合わせて使用できます。メソッドがマネージ コードで例外をスローする場合には、共通言語ランタイムが HRESULT を COM オブジェクトへ渡すことができます。メソッドがアンマネージ コードで失敗し、エラーを示す HRESULT を返した場合には、ランタイムがスローする例外をマネージ コードでキャッチできます。
ランタイムにより、HRESULT が COM 相互運用から特定の例外へ自動的に割り当てられます。たとえば、E_ACCESSDENIED は UnauthorizedAccessException、E_OUTOFMEMORY は OutOfMemoryException のようになります。
HRESULT がカスタムの結果である場合、または HRESULT がランタイムで未定義の場合には、ランタイムは汎用 COMException をクライアントに渡します。COMException の ErrorCode プロパティに HRESULT 値が格納されます。
COM 相互運用の詳細については、「高度な COM 相互運用性」を参照してください。
IErrorInfo の使用
COM からマネージ コードへエラーが渡されると、ランタイムによって例外オブジェクトにエラー情報が挿入されます。IErrorInfo をサポートし、HRESULTS を返す COM オブジェクトから、マネージ コード例外にこの情報が提供されます。たとえば、ランタイムによって COM エラーの Description が例外の Message プロパティへ割り当てられます。HRESULT に追加エラー情報がない場合には、ランタイムは例外のプロパティの多くに既定値を挿入します。
アンマネージ コードでメソッドが失敗すると、例外がマネージ コード セグメントに渡されることがあります。「HRESULT と例外」のトピックに、HRESULT とランタイム例外オブジェクトとの対応を示す表が収録されています。