5

あなたが持っているのがHRESULTだけである場合、COMエラーを解決するための意味、考えられる原因、および考えられる解決策についての最良の情報をどこで入手できるかについて、私は途方に暮れています。

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

このための良いリソースは何ですか?MSDNがGoogleの上位の結果ではないのはなぜですか?

4

4 に答える 4

6

私は常に 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 メソッドを呼び出して、呼び出したインターフェイスが実際にエラー オブジェクトを設定しているかどうかを判断する必要があります (もちろん、テンプレート コードの場合は、エラー オブジェクトが設定されている可能性があります)。

于 2008-09-15T21:12:49.860 に答える
5

%PROGRAMFILES%[Visual Studio の一部のバージョン]\Tools Common7\ フォルダーのエラー ルックアップ (ErrLook.exe) では、常にではありませんが、頻繁にエラー メッセージが表示されます。

    |---------------------------------------------------------------- --|
    | | [] エラー検索 |
    |---------------------------------------------------------------- --|
    | | 値: [0x80004027] |
    | | | |
    | | エラー メッセージ |
    | | +-------------------------------------------------+ |
    | | |を含むコンポーネントまたはアプリケーション | | |
    | | |コンポーネントが無効になっています | | |
    | | | | | | | |
    | | +-------------------------------------------------+ |
    | | [モジュール...] [検索] [閉じる] [ヘルプ] |
    |---------------------------------------------------------------- ---

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

(エラー ルックアップは、単純に FORMAT_MESSAGE_FROM_SYSTEM フラグを指定して FormatMessage() を呼び出します)

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

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

于 2008-09-15T21:04:45.217 に答える
0

COMエラーコードの構造

COMエラーコードのGoogle結果で2番目。

于 2008-09-09T14:49:01.393 に答える
0

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

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

于 2008-09-09T14:59:43.770 に答える