Struttura dei codici di errore COM

La figura seguente mostra il formato di un HRESULT (o SCODE); i numeri indicano posizioni 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, SEVERITY_SUCCESS, il valore indica l'esito positivo. Se impostato su 1, SEVERITY_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 struttura quando diventano necessari. La maggior parte dei valori SCODE e HRESULT imposta il campo della struttura su FACILITY_ITF, che indica un errore del metodo di interfaccia.

I campi della struttura comuni 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. Vale a dire, due HRESULT con 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 ampiamente applicabili, 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 IStorage o IStream relative all'archiviazione strutturata. I codici di stato il cui valore di codice (inferiore a 16 bit) si trova nell'intervallo di codici di errore MS-DOS (ovvero meno 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 Windows come HRESULT. I codici di errore in OLE a 16 bit duplicati sono stati modificati anche in FACILITY_WIN32.
FACILITY_WINDOWS
8
Usato per codici di errore aggiuntivi da interfacce definite da Microsoft.

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

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

La struttura è il nome della struttura o un altro identificatore di distinguente; La gravità è una singola lettera, S o E, che indica se la chiamata alla funzione ha avuto esito positivo (S) o ha generato un errore (E); e Motivo è 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. Codici di stato da FACILITY_NULL omettere il prefisso Facility_.

I codici di errore vengono definiti nel contesto di un'implementazione dell'interfaccia. Dopo aver definito, i codici di esito positivo non possono essere modificati o aggiunti nuovi codici di esito positivo. È tuttavia possibile scrivere nuovi codici di errore. Microsoft 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 Windows: HRESULT