COM エラー コードに関する最適な情報源は何ですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/52059

  •  09-06-2019
  •  | 
  •  

質問

HRESULT しかない場合、COM エラーの意味、考えられる原因、および解決方法に関する最良の情報をどこで入手すればよいのか、迷っています。

「80004027」のような用語をGoogleを検索することは、90%の時間でランダムなディスカッショングループに送られるため、「80004027とはどういう意味ですか?」答えられません。

これに適したリソースは何ですか?MSDN が Google の検索結果でトップにならないのはなぜですか?

役に立ちましたか?

解決

私は常に WinError.h を使用します。これには、あらゆる種類の Windows エラー コードの大部分が含まれています。

注意すべき重要な指標は、コードの機能部分です。2 番目に重要なバイト。つまり、0x80nnmmmm (nn は施設) です。これにより、どのコンポーネントがコードを生成したかがわかります。ファシリティが 7 のものはすべて、HRESULT として再パッケージ化された Windows エラー コードであり、下位ワードを 10 進数に変換して WinError.h で検索する必要があります。独自のヘッダーに表示されるエラー範囲もあります (例:12000 ~ 12999 は WinInet エラー コードであるため、WinInet.h で調べる必要があります)。

エラー コードを検索すると、シンボル名がわかります。この名前は、コード自体やエラー メッセージの文言よりも多くのドキュメントに記載されている場合があります。

FACILITY_ITF (値が 4 であるため、これらの HRESULT は 0x8004 で始まります) は、使用しているインターフェイスによってエラーが定義されていることを示します。それが何を意味するのかを知るには、そのインターフェイスを確認する必要があります。

最後に、COM は、拡張エラー情報を取得するためのインターフェイス IErrorInfo も提供します。GetErrorInfo を呼び出してエラー オブジェクトを取得します。ISupportErrorInfo をクエリし、そのインターフェイスの InterfaceSupportsErrorInfo メソッドを呼び出して、呼び出したインターフェイスが実際にエラー オブジェクトを設定しているかどうかを判断する必要があります (もちろん、それがテンプレート コードの場合は、嘘をついている可能性があります)。

他のヒント

%PROGRAMFILES%[Visual Studio の一部のバージョン] ools Common7\ フォルダー内のエラー ルックアップ (ErrLook.exe) を実行すると、次のようなエラー メッセージが表示されることがありますが、常に表示されるわけではありません。

    |---------------------------------------------------|
    | [] Error Lookup                                   |
    |---------------------------------------------------|
    |   Value: [0x80004027]                             |
    |                                                   |
    |   Error Message                                   |
    |   +---------------------------------------------+ |
    |   |The component or application containing the  | |
    |   |component has been disabled                  | |
    |   |                                             | |
    |   +---------------------------------------------+ |
    |   [Modules...]    [Look up]    [Close]    [Help]  |
    |----------------------------------------------------

これがうまくいかない場合は、ここからいくつかのアイデアに従ってください。http://blogs.msdn.com/oldnewthing/archive/2008/09/01/8914664.aspx

(エラールックアップは、format_message_from_systemフラグを使用してformatmessage()を呼び出すだけです)

COM エラーがシステム エラーではない場合は、エラーをスローしたコンポーネントのドキュメントも確認する必要がある場合があります。

コードでエラーを捕捉している場合は、コンポーネントが豊富なエラー (GetErrorInfo()、VB の Err オブジェクトと同じ) を実装しているため、問題を説明する完全なメッセージを取得できることが期待できます。

Prakash からの良いリンク (RCNr のことは知りませんでした - それらのバイトは機能の一部だと思っていました - しかし、それは 16 ビット Windows にのみ当てはまるようです)。

多くの場合、これらの不明なコードは、使用しているインターフェイス/コンポーネントに固有のものです。ファシリティは FACILITY_ITF に設定されます。古いプログラム HRPlus を使用しています (リンク?) HRESULT を解析します。

COMエラーコードの構造

COM エラー コードの Google 検索結果で 2 位。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top