Macro GetExceptionCode
Recupera un codice che identifica il tipo di eccezione che si verifica. La funzione può essere chiamata solo dall'interno dell'espressione di filtro o dal blocco del gestore eccezioni di un gestore di eccezioni.
Nota
L'ottimizzazione del compilatore Microsoft C/C++ interpreta questa funzione come parola chiave e il relativo uso all'esterno della sintassi di gestione delle eccezioni appropriata genera un errore del compilatore.
Sintassi
DWORD GetExceptionCode(void);
Parametri
Questa macro non ha parametri.
Valore restituito
Il valore restituito identifica il tipo di eccezione. La tabella seguente identifica i codici di eccezione che possono verificarsi a causa di errori di programmazione comuni. Questi valori sono definiti in WinBase.h e WinNT.h.
Codice restituito | Descrizione |
---|---|
|
Il thread tenta di leggere o scrivere in un indirizzo virtuale per il quale non ha accesso. Questo valore viene definito come STATUS_ACCESS_VIOLATION. |
|
Il thread tenta di accedere a un elemento di matrice non limitato e l'hardware sottostante supporta il controllo dei limiti. Questo valore viene definito come STATUS_ARRAY_BOUNDS_EXCEEDED. |
|
Viene rilevato un punto di interruzione. Questo valore viene definito come STATUS_BREAKPOINT. |
|
Il thread tenta di leggere o scrivere dati non allineati all'hardware che non fornisce l'allineamento. Ad esempio, i valori a 16 bit devono essere allineati su limiti a 2 byte, valori a 32 bit su limiti a 4 byte e così via. Questo valore viene definito come STATUS_DATATYPE_MISALIGNMENT. |
|
Uno degli operandi in un'operazione a virgola mobile è denormal. Un valore denormale è un valore troppo piccolo da rappresentare come valore a virgola mobile standard. Questo valore viene definito come STATUS_FLOAT_DENORMAL_OPERAND. |
|
Il thread tenta di dividere un valore a virgola mobile da un divisore a virgola mobile pari a 0 (zero). Questo valore viene definito come STATUS_FLOAT_DIVIDE_BY_ZERO. |
|
Il risultato di un'operazione a virgola mobile non può essere rappresentato esattamente come frazione decimale. Questo valore viene definito come STATUS_FLOAT_INEXACT_RESULT. |
|
Eccezione a virgola mobile non inclusa in questo elenco. Questo valore viene definito come STATUS_FLOAT_INVALID_OPERATION. |
|
L'esponente di un'operazione a virgola mobile è maggiore della grandezza consentita dal tipo corrispondente. Questo valore viene definito come STATUS_FLOAT_OVERFLOW. |
|
Lo stack ha sovraflow o sottoflow, a causa di un'operazione a virgola mobile. Questo valore viene definito come STATUS_FLOAT_STACK_CHECK. |
|
L'esponente di un'operazione a virgola mobile è minore della grandezza consentita dal tipo corrispondente. Questo valore viene definito come STATUS_FLOAT_UNDERFLOW. |
|
Il thread ha eseguito l'accesso alla memoria allocata con il modificatore PAGE_GUARD. Questo valore viene definito come STATUS_GUARD_PAGE_VIOLATION. |
|
Il thread tenta di eseguire un'istruzione non valida. Questo valore viene definito come STATUS_ILLEGAL_INSTRUCTION. |
|
Il thread tenta di accedere a una pagina non presente e il sistema non è in grado di caricare la pagina. Ad esempio, questa eccezione potrebbe verificarsi se una connessione di rete viene persa durante l'esecuzione di un programma su una rete. Questo valore viene definito come STATUS_IN_PAGE_ERROR. |
|
Il thread tenta di dividere un valore intero in base a un divisore intero pari a 0 (zero). Questo valore viene definito come STATUS_INTEGER_DIVIDE_BY_ZERO. |
|
Il risultato di un'operazione integer crea un valore troppo grande da tenere dal registro di destinazione. In alcuni casi, ciò comporterà un'esecuzione del bit più significativo del risultato. Alcune operazioni non impostano il flag di trasporto. Questo valore viene definito come STATUS_INTEGER_OVERFLOW. |
|
Un gestore eccezioni restituisce un'eliminazione non valida per il dispatcher dell'eccezione. I programmatori che usano un linguaggio di alto livello, ad esempio C, non dovrebbero mai riscontrare questa eccezione. Questo valore viene definito come STATUS_INVALID_DISPOSITION. |
|
Il thread ha usato un handle per un oggetto kernel non valido (probabilmente perché è stato chiuso). Questo valore viene definito come STATUS_INVALID_HANDLE. |
|
Il thread tenta di continuare l'esecuzione dopo che si verifica un'eccezione non continuabile. Questo valore viene definito come STATUS_NONCONTINUABLE_EXCEPTION. |
|
Il thread tenta di eseguire un'istruzione con un'operazione non consentita nella modalità computer corrente. Questo valore viene definito come STATUS_PRIVILEGED_INSTRUCTION. |
|
Una traccia trap o un altro meccanismo di istruzione singolo segnala che viene eseguita un'istruzione. Questo valore viene definito come STATUS_SINGLE_STEP. |
|
Il thread usa lo stack. Questo valore viene definito come STATUS_STACK_OVERFLOW. |
|
È stato eseguito un consolidamento dei frame. |
Commenti
La funzione GetExceptionCode può essere chiamata solo dall'interno dell'espressione di filtro o dal blocco del gestore eccezioni di un gestore di eccezioni. L'espressione di filtro viene valutata se si verifica un'eccezione durante l'esecuzione del blocco __try e determina se viene eseguito o meno il blocco __except .
L'espressione di filtro può richiamare una funzione di filtro. La funzione filtro non può chiamare GetExceptionCode. Tuttavia, il valore restituito di GetExceptionCode può essere passato come parametro a una funzione di filtro. Il valore restituito della funzione GetExceptionInformation può essere passato anche come parametro a una funzione di filtro. GetExceptionInformation restituisce un puntatore a una struttura che include le informazioni sul codice di eccezione.
Quando esistono gestori annidati, ogni espressione di filtro viene valutata fino a quando non viene valutata come EXCEPTION_EXECUTE_HANDLER o EXCEPTION_CONTINUE_EXECUTION. Ogni espressione di filtro può richiamare GetExceptionCode per ottenere il codice eccezione.
Il codice di eccezione restituito è il codice generato da un'eccezione hardware o il codice specificato nella funzione RaiseException per un'eccezione generata dal software.
Quando si gestisce l'eccezione del punto di interruzione, è importante incrementare il puntatore all'istruzione nel record di contesto per continuare da questa eccezione.
Esempio
Per un esempio, vedere Uso di un gestore eccezioni.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows XP [solo app desktop] |
Server minimo supportato |
Windows Server 2003 [solo app desktop] |
Vedi anche