Qual é a melhor fonte de informações sobre códigos de erro COM?[fechado]

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

  •  09-06-2019
  •  | 
  •  

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top