System.Runtime.InteropServices.COMException クラス

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

この COMException クラスは、認識できない HRESULT が COM メソッド呼び出しから返されたときにスローされる例外です。

共通言語ランタイムは、既知の HRESULT を .NET 例外に変換し、COM オブジェクトがマネージド クライアントに意味のあるエラー情報を返すようにします。 HRESULT から例外へのマッピングは、アンマネージ クライアントに特定の HRESULT を返すことによって、他の方向にも機能します。 マッピングの詳細については、HRESULT と例外をマップする方法を参照してください

ランタイムは、未知の HRESULT (特定の対応する例外がない HRESULT) を検出すると、クラスのインスタンスを COMException スローします。 この万能例外は、例外と同じメンバーを公開し、呼び出し先から返された HRESULT を含むパブリック ErrorCode プロパティを継承します。 ランタイムがエラー メッセージを使用できる場合 (IErrorInfo インターフェイスまたは Err Visual Basic のオブジェクトから取得した場合、またはオペレーティング システムから取得した場合)、メッセージは呼び出し元に返されます。 ただし、COM コンポーネントの開発者がエラー メッセージを含めなかった場合、ランタイムは、メッセージ文字列の代わりに 8 桁の HRESULT を返します。 HRESULT を使用すると、呼び出し元はジェネリック例外の原因を特定できます。

COMException 例外を処理する

例外のトラブルシューティングに関する考慮事項を次に COMException 示します。

プロパティを ErrorCode 確認します。ランタイムが未知の HRESULT を検出し、例外を COMException スローすると、 ErrorCode エラー メッセージまたはエラー メッセージが使用できない場合は 8 桁の HRESULT 値が含まれます。 エラー メッセージまたは HRESULT 値は、例外の原因を特定するのに役立ちます。

HRESULT 値の一覧については、「共通 HRESULT 値」を参照してください

遅延バインディング引数を Microsoft Office オブジェクトのメソッドに渡すと、 COMException オブジェクトが COM オブジェクトの場合に例外がスローされる場合があります。 遅延バインダーは、そのようなメソッド呼び出しには ByRef パラメーターが関連し、受け渡すプロパティに set アクセサーがあるものと想定します。 このプロパティがない場合、.NET は例外を MissingMethodException 生成します (HRESULT を使用 CORE_E_MISSINGMETHOD )。 このような動作に対処するには、事前バインディングされたオブジェクトを使用するか、またはオブジェクトのプロパティの代わりに変数を渡します。

COM は、Visual Studio とホスティング プロセス間の通信に使用されます。 コードの実行前に使用されるため、CoInitializeSecurity呼び出すと、この例外がスローされます。 場合によっては、Visual Studio を 管理istrator として実行すると、問題が解決される場合があります。 ホスティング プロセスを無効にすることもできます

COMException 例外をスローする

このクラスを COMException 使用してアンマネージ クライアントに特定の HRESULT を返すことができますが、ジェネリック例外を使用するよりも、特定の .NET 例外をスローすることをお勧めします。 マネージド クライアントとアンマネージド クライアントは .NET オブジェクトを使用でき、マネージド呼び出し元に HRESULT をスローすることは、例外をスローするよりも理解しにくいと考えてください。