Qual è la migliore fonte di informazioni sui codici di errore COM?[Chiuso]

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

  •  09-06-2019
  •  | 
  •  

Domanda

Non so dove trovare le migliori informazioni sul significato, sulle probabili cause e sulle possibili soluzioni per risolvere gli errori COM quando tutto ciò che hai è HRESULT.

La ricerca di Google per termini come "80004027" è quasi inutile in quanto ti invia a gruppi di discussione casuali in cui il 90% delle volte, la domanda "Cosa significa 80004027?" non ha risposto.

Qual è una buona risorsa per questo?Perché MSDN non è il primo risultato di Google?

È stato utile?

Soluzione

Utilizzo sempre WinError.h.Contiene la stragrande maggioranza dei codici di errore di Windows di tutti i tipi.

Un indicatore chiave a cui prestare attenzione è la parte Facility del codice:il secondo byte più significativo.Cioè, 0x80nnmmmm, dove nn è la struttura.Questo ti dice quale componente ha generato il codice.Qualunque cosa con una funzionalità pari a 7 è un codice di errore di Windows riconfezionato come HRESULT e dovresti convertire la parola bassa in decimale e cercarla in WinError.h.Ci sono anche intervalli di errore che appaiono nelle rispettive intestazioni (ad es.qualsiasi cosa da 12000 a 12999 è un codice di errore WinInet e dovresti cercarlo in WinInet.h).

La ricerca del codice di errore ti darà il nome simbolico, che potrebbe essere trovato in più documentazione oltre al codice stesso o al testo del messaggio di errore.

FACILITY_ITF (che ha il valore 4, quindi questi HRESULT iniziano con 0x8004) indica che l'errore è definito dall'interfaccia che stai utilizzando;dovrai verificare con quell'interfaccia per scoprire cosa significa.

Infine, COM offre anche l'interfaccia IErrorInfo per recuperare informazioni estese sull'errore:chiamare GetErrorInfo per recuperare l'oggetto errore.Dovrai eseguire una query per ISupportErrorInfo e chiamare il metodo InterfaceSupportsErrorInfo di quell'interfaccia per determinare se l'interfaccia che hai chiamato ha effettivamente impostato l'oggetto errore (e ovviamente, se si trattava di codice modello, potrebbe mentire).

Altri suggerimenti

La ricerca errori (ErrLook.exe) nella cartella %PROGRAMFILES%[Alcune versioni di Visual Studio] ools Common7\ restituirà spesso il messaggio di errore, ma non sempre:

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

Se questo non funziona, potresti seguire alcune idee da qui:http://blogs.msdn.com/oldnewthing/archive/2008/09/01/8914664.aspx

(Errore Lookup chiama semplicemente formatMessage () con il flag format_message_from_system)

Se l'errore COM non è un errore di sistema, potrebbe essere necessario controllare anche la documentazione del componente che ha generato l'errore.

Se rilevi l'errore nel codice, puoi sperare che il componente implementi errori avanzati (GetErrorInfo(), come l'oggetto Err in VB) in modo da poter ottenere un messaggio completo che descrive il problema.

Buon collegamento da Prakash (non ero a conoscenza del materiale RCNr - pensavo che quei byte facessero parte della struttura - ma sembra che sia vero solo in Windows a 16 bit.)

Spesso questi codici sconosciuti sono specifici dell'interfaccia/componente che stai utilizzando.La struttura verrebbe impostata su FACILITY_ITF.Ho un vecchio programma HRPlus (collegamento?) che analizza HRESULT.

Struttura del codice di errore COM

Secondo nei risultati di Google per il codice di errore COM.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top