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".

Gestione degli errori in COM