Struttura dei codici di errore COM

La figura seguente mostra il formato di un HRESULT (o SCODE); i numeri indicano posizioni di bit:

Shows the format of an 'H RESULT' or 'S CODE' with numbers indicating bit positions.

Il bit di ordine elevato in HRESULT o SCODE indica se il valore restituito rappresenta l'esito positivo o negativo. Se impostato su 0, edizione StandardVERITY_SUCCESS, il valore indica l'esito positivo. Se impostato su 1, edizione StandardVERITY_ERROR indica un errore.

I bit R, C, N e r sono riservati.

Il campo della struttura indica il servizio di sistema responsabile dell'errore. Microsoft alloca nuovi codici di funzionalità man mano che diventano necessari. La maggior parte dei valori SCODE e HRESULT imposta il campo della struttura su FACILITY_ITF, a indicare un errore del metodo di interfaccia.

I campi comuni della struttura sono descritti nella tabella seguente.

Campo struttura Valore Descrizione
FACILITY_DISPATCH
2
Per errori di interfaccia IDispatch di associazione tardiva .
FACILITY_ITF
4
Per la maggior parte dei codici di stato restituiti dai metodi di interfaccia. Il significato effettivo dell'errore è definito dall'interfaccia . Ovvero, due HRESULTcon esattamente lo stesso valore a 32 bit restituito da due interfacce diverse potrebbero avere significati diversi.
FACILITY_NULL
0
Per i codici di stato comuni applicabili a livello generale, ad esempio S_OK.
FACILITY_RPC
1
Per i codici di stato restituiti dalle chiamate di procedura remota.
FACILITY_STORAGE
3
Per i codici di stato restituiti dalle chiamate al metodo I Archiviazione o IStream relative all'archiviazione strutturata. Codici di stato il cui valore di codice (inferiore a 16 bit) si trova nell'intervallo di codici di errore MS-DOS (ovvero minori di 256) hanno lo stesso significato dell'errore MS-DOS corrispondente.
FACILITY_WIN32
7
Usato per fornire un mezzo per gestire i codici di errore dalle funzioni nell'API Di Windows come HRESULT. Anche i codici di errore in OLE a 16 bit che hanno duplicato i codici di errore di sistema sono stati modificati in FACILITY_WIN32.
FACILITY_WINDOWS
8
Usato per codici di errore aggiuntivi dalle interfacce definite da Microsoft.

Il campo del codice è un numero univoco assegnato per rappresentare l'errore o l'avviso.

Per convenzione, i valori HRESULT hanno in genere nomi nel formato seguente: Facility_Severity_Reason.

La struttura è il nome della struttura o un altro identificatore distintivo; La gravità è una singola lettera, S o E, che indica se la chiamata di funzione ha avuto esito positivo (S) o ha generato un errore (E) e Reason è un identificatore che descrive il significato del codice. Ad esempio, il codice di stato STG_E_FILENOTFOUND indica che si è verificato un errore correlato all'archiviazione; in particolare, un file richiesto non esiste. I codici di stato di FACILITY_NULL omettono il prefisso Facility_.

I codici di errore vengono definiti all'interno del contesto di un'implementazione dell'interfaccia. Una volta definiti, i codici di operazione riuscita non possono essere modificati o aggiunti nuovi codici di operazione riuscita. È tuttavia possibile scrivere nuovi codici di errore. Microsoft si riserva il diritto di definire nuovi codici di errore (ma non codici di esito positivo) per le interfacce descritte in FACILITY_ITF o in nuove strutture.

Gestione degli errori in COM

Protocolli di Windows: HRESULT