Delen via


Exception-Handler syntaxis

De __try en __except trefwoorden worden gebruikt om een op frame gebaseerde uitzonderingshandler te maken. In het volgende voorbeeld ziet u de structuur van een uitzonderingshandler.

__try 
{
    // guarded body of code 
 
} 
__except (filter-expression) 
{ 
    // exception-handler block 
 
}

Houd er rekening mee dat voor het blok __try en het blok uitzonderingshandler accolades ({}) zijn vereist. Het gebruik van een ga naar instructie om naar de hoofdtekst van een __try blok of naar een uitzonderingshandlerblok te springen, is niet toegestaan. Deze regel is van toepassing op zowel uitzonderingshandlers als beëindigingshandlers.

Het __try blok bevat de beveiligde codetekst die de uitzonderingshandler beveiligt. Een functie kan een willekeurig aantal uitzonderingshandlers hebben en deze instructies voor het verwerken van uitzonderingen kunnen worden genest binnen dezelfde functie of in verschillende functies. Als er een uitzondering optreedt binnen het __try blok, neemt het systeem de controle en begint het zoeken naar een uitzonderingshandler. Zie Uitzonderingsafhandelingvoor een gedetailleerde beschrijving van deze zoekopdracht.

De uitzonderingshandler ontvangt alleen uitzonderingen die zich binnen één thread voordoen. Dit betekent dat als een __try blok een aanroep naar de CreateProcess of functie CreateThread bevat, uitzonderingen die optreden binnen het nieuwe proces of de nieuwe thread, niet naar deze handler worden verzonden.

Het systeem evalueert de filterexpressie van elke uitzonderingshandler die de code bewaakt waarin de uitzondering heeft plaatsgevonden totdat de uitzondering wordt verwerkt of dat er geen handlers meer zijn. Een filterexpressie moet worden geëvalueerd als een van de drie volgende waarden.

Waarde Betekenis
EXCEPTION_EXECUTE_HANDLER Het systeem draagt het besturingselement over naar de uitzonderingshandler en de uitvoering wordt voortgezet in het stackframe waarin de handler wordt gevonden.
EXCEPTION_CONTINUE_SEARCH Het systeem blijft zoeken naar een handler.
EXCEPTION_CONTINUE_EXECUTION Het systeem stopt het zoeken naar een handler en retourneert het besturingselement tot het punt waarop de uitzondering heeft plaatsgevonden. Als de uitzondering niet continu is, resulteert dit in een EXCEPTION_NONCONTINUABLE_EXCEPTION uitzondering.

 

De filterexpressie wordt geëvalueerd in de context van de functie waarin de uitzonderingshandler zich bevindt, ook al is de uitzondering mogelijk opgetreden in een andere functie. Dit betekent dat de filterexpressie toegang heeft tot de lokale variabelen van de functie. Op dezelfde manier heeft het blok uitzonderingshandler toegang tot de lokale variabelen van de functie waarin deze zich bevindt.

Zie Een uitzonderingshandler gebruikenvoor meer voorbeelden.

Zie Op frame gebaseerde uitzonderingsafhandelingvoor meer informatie over filterexpressies en filterfuncties.