Quelle est la meilleure source d’informations sur les codes d’erreur COM ?[fermé]

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

  •  09-06-2019
  •  | 
  •  

Question

Je ne sais pas où obtenir les meilleures informations sur la signification, les causes probables et les solutions possibles pour résoudre les erreurs COM alors que tout ce que vous avez est le HRESULT.

La recherche de termes comme «80004027» est à peu près inutile car il vous envoie à des groupes de discussion aléatoires où 90% du temps, la question «Que signifie 80004027? n'est pas répondu.

Quelle est une bonne ressource pour cela ?Pourquoi MSDN n'est-il pas le premier résultat Google ?

Était-ce utile?

La solution

J'utilise toujours WinError.h.Cela contient la grande majorité des codes d’erreur Windows de toutes sortes.

Un indicateur clé à surveiller est la partie Installation du code :le deuxième octet de poids fort.Autrement dit, 0x80nnmmmm, où nn est l'installation.Cela vous indique quel composant a généré le code.Tout ce qui a une valeur de 7 est un code d'erreur Windows reconditionné en tant que HRESULT, et vous devez convertir le mot faible en décimal et le rechercher dans WinError.h.Il existe également des plages d'erreurs qui apparaissent dans leurs propres en-têtes (par ex.tout ce qui se situe entre 12000 et 12999 est un code d'erreur WinInet et vous devez le rechercher dans WinInet.h).

La recherche du code d'erreur vous donnera le nom symbolique, qui peut être trouvé dans plus de documentation que le code lui-même ou le libellé du message d'erreur.

FACILITY_ITF (qui a la valeur 4, donc ces HRESULT commencent par 0x8004) indique que l'erreur est définie par l'interface que vous utilisez ;vous devrez vérifier avec cette interface pour savoir ce que cela signifie.

Enfin, COM propose également l'interface IErrorInfo pour récupérer des informations d'erreur étendues :appelez GetErrorInfo pour récupérer l’objet d’erreur.Vous devrez interroger ISupportErrorInfo et appeler la méthode InterfaceSupportsErrorInfo de cette interface pour déterminer si l'interface que vous avez appelée a réellement défini l'objet d'erreur (et bien sûr, s'il s'agissait de code de modèle, il pourrait mentir).

Autres conseils

La recherche d'erreur (ErrLook.exe) dans votre dossier %PROGRAMFILES%[Certaines versions de Visual Studio] ools Common7\ vous donnera souvent le message d'erreur, mais pas toujours :

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

Si cela ne fonctionne pas, vous pouvez suivre quelques idées à partir d'ici :http://blogs.msdn.com/oldnewthing/archive/2008/09/01/8914664.aspx

(La recherche d'erreur appelle simplement FormatMessage () avec le drapeau format_message_from_system)

Si l'erreur COM n'est pas une erreur système, vous devrez peut-être également consulter la documentation du composant à l'origine de l'erreur.

Si vous détectez l'erreur dans le code, vous pouvez espérer que le composant implémente des erreurs riches (GetErrorInfo(), identique à l'objet Err dans VB) afin que vous puissiez obtenir un message complet décrivant le problème.

Bon lien de Prakash (je n'étais pas au courant des trucs RCNr - je pensais que ces octets faisaient partie de l'installation - mais ce n'est vrai que dans Windows 16 bits, semble-t-il.)

Souvent, ces codes inconnus sont spécifiques à l'interface/au composant que vous utilisez.L'installation serait définie sur FACILITY_ITF.J'ai un ancien programme HRPlus (lien?) qui analyse les HRESULT.

Structure du code d'erreur COM

Deuxième dans les résultats Google pour le code d'erreur COM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top