次の方法で共有


エラーの処理方法

インターフェイス メソッドは仮想であるため、呼び出し元は 1 回の呼び出しから返される可能性のある値の完全なセットを知ることはできません。 メソッドの 1 つの実装では 5 つの値が返される場合があります。他の人は 8 を返すかもしれません。

ドキュメントには、各メソッドで返される可能性のある一般的な値がリストされています。これらの値には特別な意味があるため、コード内で確認して処理する必要があります。 他の値が返される場合もありますが、それらは意味がないため、それらを処理するための特別なコードを作成する必要はありません。 0 か 0 以外かを単純にチェックするだけで十分です。

HRESULT の値

COM 関数とメソッドの戻り値は HRESULT です。 一部の HRESULT の値は、システム エラー コードとの重複をすべて排除するように COM で変更されました。 システム エラー コードが重複するものは FACILITY_WIN32 に変更され、重複するものは FACILITY_NULL のままとなります。 一般的な HRESULT 値とその値を次の表に示します。

HRESULT Value 説明
E_ABORT
0x80004004
不特定のエラーのため、操作は中止されました。
E_ACCESSDENIED
0x80070005
一般的なアクセス拒否エラー。
E_FAIL
0x80004005
指定されていないエラーが発生しました。
E_HANDLE
0x80070006
無効なハンドルが使用されました。
E_INVALIDARG
0x80070057
1 つ以上の引数が無効です。
E_NOINTERFACE
0x80004002
QueryInterface メソッドは要求されたインターフェイスを認識しませんでした。 インターフェイスはサポートされません。
E_NOTIMPL
0x80004001
このメソッドは実装されていません。
E_OUTOFMEMORY
0x8007000E
メソッドが必要なメモリの割り当てに失敗しました。
E_PENDING
0x8000000A
操作を完了するために必要なデータはまだ入手できません。
E_POINTER
0x80004003
無効なポインターが使用されました。
E_UNEXPECTED
0x8000FFFF
致命的な障害が発生しました。
S_FALSE
0x00000001
メソッドは成功し、ブール値 FALSE を返しました。
S_OK
0x00000000
メソッドが成功しました。 ブール値の戻り値が必要な場合、戻り値は TRUE です。

ネットワーク エラー

エラー コードの最初の 4 桁が 8007 の場合、これはシステムまたはネットワーク エラーを示します。 net コマンドを使用して、これらの種類のエラーをデコードできます。 エラーをデコードするには、まず 16 進数のエラー コードの最後の 4 桁を 10 進数に変換します。 次に、コマンド プロンプトで次のように入力します。ここで、10 進コードはデコードする戻り値に置き換えられます。

net helpmsg <decimal_code>

net コマンドはエラーの説明を返します。 たとえば、COM がエラー 8007054B を返した場合、054B を 10 進数 (1355) に変換します。 その後、次のように入力します。

net helpmsg 1355

net コマンドは、「指定されたドメインは存在しませんでした」というエラーの説明を返します。

COM でのエラー処理