エラー処理戦略
インターフェイス メソッドは仮想であるため、呼び出し元は、1 つの呼び出しから返される可能性がある値の完全なセットを認識することはできません。 メソッドの実装の 1 つは、5 つの値を返す場合があります。もう 1 つは 8 を返す場合があります。
ドキュメントには、各メソッドに対して返される可能性がある一般的な値が一覧表示されます。これらは特別な意味を持っているため、コードでチェックして処理する必要がある値です。 他の値が返される場合もありますが、意味がないため、それらを処理するために特別なコードを記述する必要はありません。 0 または 0 以外の単純なチェックで十分です。
HRESULT 値
COM 関数とメソッドの戻り値は、HRESULT です。 一部の HRESULT の値は、すべての重複を排除し、システム エラー コードと重複しないように COM で変更されています。 重複するシステム エラー コードがFACILITY_WIN32に変更され、重複するエラー コードはFACILITY_NULLに残ります。 一般的な HRESULT 値とその値を次の表に示します。
HRESULT | 価値 | 形容 |
---|---|---|
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 でのエラー処理の