Strategie di gestione degli errori
Poiché i metodi di interfaccia sono virtuali, non è possibile che un chiamante conosca il set completo di valori che possono essere restituiti da una chiamata. Un'implementazione di un metodo può restituire cinque valori; un altro può restituire otto.
La documentazione elenca i valori comuni che possono essere restituiti per ogni metodo; questi sono i valori che è necessario controllare e gestire nel codice perché hanno significati speciali. Altri valori possono essere restituiti, ma poiché non sono significativi, non è necessario scrivere codice speciale per gestirli. Un semplice controllo per zero o diverso da zero è adeguato.
Valori HRESULT
Il valore restituito di funzioni e metodi COM è hresult. I valori di alcuni HRESULT sono stati modificati in COM per eliminare tutti i duplicati e sovrapporsi ai codici di errore di sistema. Quelli che duplicano i codici di errore di sistema sono stati modificati in FACILITY_WIN32 e quelli che si sovrappongono rimangono in FACILITY_NULL. I valori HRESULT comuni e i relativi valori sono elencati nella tabella seguente.
HRESULT | Valore | Descrizione |
---|---|---|
E_ABORT |
0x80004004 |
L'operazione è stata interrotta a causa di un errore non specificato. |
E_ACCESSDENIED |
0x80070005 |
Errore generale di accesso negato. |
E_FAIL |
0x80004005 |
Si è verificato un errore non specificato. |
E_HANDLE |
0x80070006 |
È stato usato un handle non valido. |
E_INVALIDARG |
0x80070057 |
Uno o più argomenti non sono validi. |
E_NOINTERFACE |
0x80004002 |
Il metodo QueryInterface non riconosce l'interfaccia richiesta. L'interfaccia non è supportata. |
E_NOTIMPL |
0x80004001 |
Il metodo non è implementato. |
E_OUTOFMEMORY |
0x8007000E |
Il metodo non è riuscito ad allocare la memoria necessaria. |
E_PENDING |
0x8000000A |
I dati necessari per completare l'operazione non sono ancora disponibili. |
E_POINTER |
0x80004003 |
È stato utilizzato un puntatore non valido. |
E_UNEXPECTED |
0x8000FFFF |
Si è verificato un errore irreversibile. |
S_FALSE |
0x00000001 |
Il metodo ha avuto esito positivo e ha restituito il valore booleano FAL edizione Standard. |
S_OK |
0x00000000 |
Il metodo è riuscito. Se è previsto un valore restituito booleano, il valore restituito è TRUE. |
Errori di rete
Se le prime quattro cifre del codice di errore sono 8007, indica un errore di sistema o di rete. È possibile usare il comando net per decodificare questi tipi di errori. Per decodificare l'errore, convertire prima le ultime quattro cifre del codice di errore esadecimale in decimale. Al prompt dei comandi digitare quindi quanto segue, dove il codice decimale viene sostituito con il valore restituito da decodificare:
net helpmsg <decimal_code>
Il comando net restituisce una descrizione dell'errore. Ad esempio, se COM restituisce l'errore 8007054B, convertire 054B in decimale (1355). Digitare quindi quanto segue:
net helpmsg 1355
Il comando net restituisce la descrizione dell'errore: "Il dominio specificato non esiste".