Qual é a melhor fonte de informações sobre códigos de erro COM?[fechado]
Pergunta
Não sei onde obter as melhores informações sobre o significado, as causas prováveis e as possíveis soluções para resolver erros de COM quando tudo o que você tem é o HRESULT.
Pesquisando o Google por termos como '80004027' é quase inútil, pois o envia para grupos de discussão aleatórios onde 90% das vezes, a pergunta 'o que 80004027 significa?' não é respondido.
Qual é um bom recurso para isso?Por que o MSDN não é o principal resultado do Google?
Solução
Eu sempre uso WinError.h.Isso contém a grande maioria dos códigos de erro do Windows de todos os tipos.
Um indicador importante a ser observado é a parte Facility do código:o segundo byte mais significativo.Ou seja, 0x80nnmmmm, onde nn é a Instalação.Isso informa qual componente gerou o código.Qualquer coisa com facilidade 7 é um código de erro do Windows reembalado como um HRESULT, e você deve converter a palavra baixa em decimal e procurá-la em WinError.h.Existem também intervalos de erros que aparecem em seus próprios cabeçalhos (por exemplo,qualquer coisa entre 12.000 e 12.999 é um código de erro do WinInet e você deve procurá-lo em WinInet.h).
Procurar o código de erro fornecerá o nome simbólico, que pode ser encontrado em mais documentação do que no próprio código ou no texto da mensagem de erro.
FACILITY_ITF (que tem o valor 4, portanto esses HRESULTs iniciam em 0x8004) indica que o erro é definido pela interface que você está usando;você terá que verificar essa interface para descobrir o que isso significa.
Finalmente, COM também oferece a interface IErrorInfo para recuperar informações estendidas de erro:chame GetErrorInfo para recuperar o objeto de erro.Você terá que consultar ISupportErrorInfo e chamar o método InterfaceSupportsErrorInfo dessa interface para determinar se a interface que você chamou realmente definiu o objeto de erro (e, claro, se fosse um código de modelo, poderia estar mentindo).
Outras dicas
A pesquisa de erros (ErrLook.exe) na pasta %PROGRAMFILES%[Alguma versão do Visual Studio] ools Common7\ fornecerá a mensagem de erro com frequência, mas nem sempre:
|---------------------------------------------------| | [] Error Lookup | |---------------------------------------------------| | Value: [0x80004027] | | | | Error Message | | +---------------------------------------------+ | | |The component or application containing the | | | |component has been disabled | | | | | | | +---------------------------------------------+ | | [Modules...] [Look up] [Close] [Help] | |----------------------------------------------------
Se isso não funcionar, você pode seguir algumas idéias daqui:http://blogs.msdn.com/oldnewthing/archive/2008/09/01/8914664.aspx
(A pesquisa de erro simplesmente chama formatMessage () com o Format_Message_From_System Sinalizador)
Se o erro COM não for um erro do sistema, talvez seja necessário verificar a documentação do componente que gerou o erro.
Se você estiver detectando o erro no código, pode esperar que o componente implemente erros ricos (GetErrorInfo(), o mesmo que o objeto Err em VB) para que você possa obter uma mensagem completa descrevendo o problema.
Bom link de Prakash (eu não estava ciente do material RCNr - pensei que esses bytes faziam parte do recurso - mas parece que isso só é verdade no Windows de 16 bits.)
Freqüentemente, esses códigos desconhecidos são específicos da interface/componente que você está usando.A instalação seria definida como FACILITY_ITF.Eu tenho um programa antigo HRPlus (link?) que analisa HRESULTs.
Estrutura do código de erro COM
Segundo lugar nos resultados do Google para código de erro COM.