次の方法で共有


COM 相互運用例外の処理

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

ランタイムは、COM 相互運用機能からの HRESULT をより具体的な例外に自動的にマップします。 たとえば、E_ACCESSDENIEDが UnauthorizedAccessExceptionになったり、E_OUTOFMEMORYが OutOfMemoryExceptionになったりします。

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

IErrorInfo の操作

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

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

こちらも参照ください