¿Cuál es la mejor fuente de información sobre códigos de error COM?[cerrado]

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

  •  09-06-2019
  •  | 
  •  

Pregunta

No sé dónde obtener la mejor información sobre el significado, las causas probables y las posibles soluciones para resolver errores COM cuando todo lo que tienes es HRESULT.

Buscar términos de Google como '80004027' es casi inútil, ya que lo envía a grupos de discusión aleatorios donde el 90% del tiempo, la pregunta '¿Qué significa 80004027?' no se responde.

¿Cuál es un buen recurso para esto?¿Por qué MSDN no aparece en los primeros resultados de Google?

¿Fue útil?

Solución

Siempre uso WinError.h.Ahí se encuentran la gran mayoría de códigos de error de Windows de todo tipo.

Un indicador clave a tener en cuenta es la parte de Instalación del código:el segundo byte más significativo.Es decir, 0x80nnmmmm, donde nn es la Instalación.Eso le indica qué componente generó el código.Cualquier cosa con una función de 7 es un código de error de Windows reempaquetado como HRESULT, y debe convertir la palabra baja a decimal y buscarla en WinError.h.También hay rangos de error que aparecen en sus propios encabezados (p. ej.cualquier valor entre 12000 y 12999 es un código de error de WinInet y debe buscarlo en WinInet.h).

Buscar el código de error le dará el nombre simbólico, que puede encontrarse en más documentación que el código en sí o el texto del mensaje de error.

FACILITY_ITF (que tiene el valor 4, por lo que estos HRESULT comienzan con 0x8004) indica que el error está definido por la interfaz que estás utilizando;Tendrás que consultar con esa interfaz para saber qué significa.

Finalmente, COM también ofrece la interfaz IErrorInfo para recuperar información de error extendida:Llame a GetErrorInfo para recuperar el objeto de error.Tendrá que consultar ISupportErrorInfo y llamar al método InterfaceSupportsErrorInfo de esa interfaz para determinar si la interfaz que llamó realmente estableció el objeto de error (y, por supuesto, si era código de plantilla, podría estar mintiendo).

Otros consejos

La búsqueda de errores (ErrLook.exe) en su carpeta %PROGRAMFILES%[Alguna versión de Visual Studio] ools Common7\ le dará el mensaje de error con frecuencia, pero no siempre:

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

Si esto no funciona, puedes seguir algunas ideas desde aquí:http://blogs.msdn.com/oldnewthing/archive/2008/09/01/8914664.aspx

(Búsqueda de error simplemente llama a FormatMessage () con el format_message_from_system indicador)

Si el error COM no es un error del sistema, es posible que también deba consultar la documentación del componente que generó el error.

Si detecta el error en el código, puede esperar que el componente implemente errores enriquecidos (GetErrorInfo(), igual que el objeto Err en VB) para que pueda recibir un mensaje completo que describa el problema.

Buen enlace de Prakash (no estaba al tanto de las cosas de RCNr; pensé que esos bytes eran parte de la instalación, pero parece que eso solo es cierto en Windows de 16 bits).

A menudo, estos códigos desconocidos son específicos de la interfaz/componente que estás utilizando.La instalación se establecería en FACILITY_ITF.Tengo un programa antiguo HRPlus (¿enlace?) que analiza HRESULT.

Estructura del código de error COM

Segundo en los resultados de Google por código de error COM.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top