GetExceptionCode-Makro

Ruft einen Code ab, der den Typ der auftretenden Ausnahme identifiziert. Die Funktion kann nur innerhalb des Filterausdrucks- oder Ausnahmehandlerblocks eines Ausnahmehandlers aufgerufen werden.

Hinweis

Der Microsoft C/C++-Optimierungscompiler interpretiert diese Funktion als Schlüsselwort (keyword), und ihre Verwendung außerhalb der entsprechenden Ausnahmebehandlungssyntax generiert einen Compilerfehler.

 

Syntax

DWORD GetExceptionCode(void);

Parameter

Dieses Makro verfügt über keine Parameter.

Rückgabewert

Der Rückgabewert gibt den Ausnahmetyp an. In der folgenden Tabelle sind die Ausnahmecodes aufgeführt, die aufgrund häufiger Programmierfehler auftreten können. Diese Werte werden in WinBase.h und WinNT.h definiert.

Rückgabecode Beschreibung
EXCEPTION_ACCESS_VIOLATION
Der Thread versucht, aus einer virtuellen Adresse zu lesen oder in eine virtuelle Adresse zu schreiben, auf die er keinen Zugriff hat.
Dieser Wert ist als STATUS_ACCESS_VIOLATION definiert.
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
Der Thread versucht, auf ein Arrayelement zuzugreifen, das außerhalb der Grenzen liegt, und die zugrunde liegende Hardware unterstützt die Begrenzungsüberprüfung.
Dieser Wert ist als STATUS_ARRAY_BOUNDS_EXCEEDED definiert.
EXCEPTION_BREAKPOINT
Es wird ein Haltepunkt gefunden.
Dieser Wert ist als STATUS_BREAKPOINT definiert.
EXCEPTION_DATATYPE_MISALIGNMENT
Der Thread versucht, Daten zu lesen oder zu schreiben, die auf Hardware, die keine Ausrichtung bietet, falsch ausgerichtet sind. Beispielsweise müssen 16-Bit-Werte an 2-Byte-Grenzen, 32-Bit-Werten an 4-Byte-Grenzen usw. ausgerichtet werden.
Dieser Wert ist als STATUS_DATATYPE_MISALIGNMENT definiert.
EXCEPTION_FLT_DENORMAL_OPERAND
Einer der Operanden in einem Gleitkommavorgang ist denormal. Ein Denormalwert ist zu klein, um als Standard-Gleitkommawert darzustellen.
Dieser Wert ist als STATUS_FLOAT_DENORMAL_OPERAND definiert.
EXCEPTION_FLT_DIVIDE_BY_ZERO
Der Thread versucht, einen Gleitkommawert durch einen Gleitkommateiler von 0 (Null) zu dividieren.
Dieser Wert ist als STATUS_FLOAT_DIVIDE_BY_ZERO definiert.
EXCEPTION_FLT_INEXACT_RESULT
Das Ergebnis eines Gleitkommavorgangs kann nicht genau als Dezimalbruch dargestellt werden.
Dieser Wert ist als STATUS_FLOAT_INEXACT_RESULT definiert.
EXCEPTION_FLT_INVALID_OPERATION
Eine Gleitkomma-Ausnahme, die nicht in dieser Liste enthalten ist.
Dieser Wert ist als STATUS_FLOAT_INVALID_OPERATION definiert.
EXCEPTION_FLT_OVERFLOW
Der Exponent eines Gleitkommavorgangs ist größer als die vom entsprechenden Typ zulässige Größe.
Dieser Wert wird als STATUS_FLOAT_OVERFLOW definiert.
EXCEPTION_FLT_STACK_CHECK
Der Stapel ist aufgrund eines Gleitkommavorgangs über- oder unterfließt.
Dieser Wert ist als STATUS_FLOAT_STACK_CHECK definiert.
EXCEPTION_FLT_UNDERFLOW
Der Exponent eines Gleitkommavorgangs ist kleiner als die vom entsprechenden Typ zulässige Größe.
Dieser Wert ist als STATUS_FLOAT_UNDERFLOW definiert.
EXCEPTION_GUARD_PAGE
Der Thread hat auf den Arbeitsspeicher zugegriffen, der mit dem PAGE_GUARD-Modifizierer zugeordnet ist.
Dieser Wert ist als STATUS_GUARD_PAGE_VIOLATION definiert.
EXCEPTION_ILLEGAL_INSTRUCTION
Der Thread versucht, eine ungültige Anweisung auszuführen.
Dieser Wert ist als STATUS_ILLEGAL_INSTRUCTION definiert.
EXCEPTION_IN_PAGE_ERROR
Der Thread versucht, auf eine Seite zuzugreifen, die nicht vorhanden ist, und das System kann die Seite nicht laden. Diese Ausnahme kann beispielsweise auftreten, wenn eine Netzwerkverbindung während der Ausführung eines Programms über ein Netzwerk unterbrochen wird.
Dieser Wert ist als STATUS_IN_PAGE_ERROR definiert.
EXCEPTION_INT_DIVIDE_BY_ZERO
Der Thread versucht, einen ganzzahligen Wert durch einen ganzzahligen Divisor von 0 (Null) zu dividieren.
Dieser Wert ist als STATUS_INTEGER_DIVIDE_BY_ZERO definiert.
EXCEPTION_INT_OVERFLOW
Das Ergebnis eines ganzzahligen Vorgangs erstellt einen Wert, der zu groß ist, um vom Zielregister gespeichert zu werden. In einigen Fällen führt dies zu einer Durchführung des wichtigsten Teils des Ergebnisses. Bei einigen Vorgängen wird das Carry-Flag nicht festgelegt.
Dieser Wert ist als STATUS_INTEGER_OVERFLOW definiert.
EXCEPTION_INVALID_DISPOSITION
Ein Ausnahmehandler gibt eine ungültige Disposition an den Ausnahmeverteiler zurück. Programmierer, die eine allgemeine Sprache wie C verwenden, sollten niemals auf diese Ausnahme stoßen.
Dieser Wert wird als STATUS_INVALID_DISPOSITION definiert.
EXCEPTION_INVALID_HANDLE
Der Thread verwendet ein Handle für ein Kernelobjekt, das ungültig war (wahrscheinlich, weil es geschlossen wurde).)
Dieser Wert wird als STATUS_INVALID_HANDLE definiert.
EXCEPTION_NONCONTINUABLE_EXCEPTION
Der Thread versucht, die Ausführung fortzusetzen, nachdem eine nicht fortlaufende Ausnahme auftritt.
Dieser Wert ist als STATUS_NONCONTINUABLE_EXCEPTION definiert.
EXCEPTION_PRIV_INSTRUCTION
Der Thread versucht, eine Anweisung mit einem Vorgang auszuführen, der im aktuellen Computermodus nicht zulässig ist.
Dieser Wert ist als STATUS_PRIVILEGED_INSTRUCTION definiert.
EXCEPTION_SINGLE_STEP
Eine Ablaufverfolgungsfalle oder ein anderer einzelner Anweisungsmechanismus signalisiert, dass eine Anweisung ausgeführt wird.
Dieser Wert ist als STATUS_SINGLE_STEP definiert.
EXCEPTION_STACK_OVERFLOW
Der Thread verwendet seinen Stapel.
Dieser Wert ist als STATUS_STACK_OVERFLOW definiert.
STATUS_UNWIND_CONSOLIDATE
Eine Framekonsolidierung wurde ausgeführt.

 

Bemerkungen

Die GetExceptionCode-Funktion kann nur innerhalb des Filterausdrucks oder Ausnahmehandlerblocks eines Ausnahmehandlers aufgerufen werden. Der Filterausdruck wird ausgewertet, wenn während der Ausführung des __try blocks eine Ausnahme auftritt und bestimmt, ob der __except Block ausgeführt wird.

Der Filterausdruck kann eine Filterfunktion aufrufen. Die Filterfunktion kann GetExceptionCode nicht aufrufen. Der Rückgabewert von GetExceptionCode kann jedoch als Parameter an eine Filterfunktion übergeben werden. Der Rückgabewert der GetExceptionInformation-Funktion kann auch als Parameter an eine Filterfunktion übergeben werden. GetExceptionInformation gibt einen Zeiger auf eine Struktur zurück, die die Ausnahmecodeinformationen enthält.

Wenn geschachtelte Handler vorhanden sind, wird jeder Filterausdruck ausgewertet, bis einer als EXCEPTION_EXECUTE_HANDLER oder EXCEPTION_CONTINUE_EXECUTION ausgewertet wird. Jeder Filterausdruck kann GetExceptionCode aufrufen, um den Ausnahmecode abzurufen.

Der zurückgegebene Ausnahmecode ist der von einer Hardwareausnahme generierte Code oder der Code, der in der RaiseException-Funktion für eine softwaregenerierte Ausnahme angegeben ist.

Beim Behandeln der Breakpointausnahme ist es wichtig, den Anweisungszeiger im Kontextdatensatz inkrementieren, um von dieser Ausnahme fortzufahren.

Beispiele

Ein Beispiel finden Sie unter Verwenden eines Ausnahmehandlers.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2003 [nur Desktop-Apps]

Weitere Informationen

GetExceptionInformation

Raiseexception

Strukturierte Ausnahmebehandlungsfunktionen

Übersicht über strukturierte Ausnahmebehandlung