Dela via


Exception-Handler syntax

Nyckelorden __try och __except används för att skapa en rambaserad undantagshanterare. I följande exempel visas strukturen för en undantagshanterare.

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

Observera att det __try blocket och undantagshanterarblocket kräver klammerparenteser ({}). Det är inte tillåtet att använda en goto-instruktion för att hoppa in i brödtexten i ett __try block eller i ett undantagshanterarblock. Den här regeln gäller både undantagshanterare och avslutningshanterare.

Det __try blocket innehåller den skyddade kodtexten som undantagshanteraren skyddar. En funktion kan ha valfritt antal undantagshanterare, och dessa undantagshanteringssatser kan kapslas i samma funktion eller i olika funktioner. Om ett undantag inträffar inom __try-blocket tar systemet kontroll och påbörjar sökningen efter en undantagshanterare. En detaljerad beskrivning av den här sökningen finns i Undantagshantering.

Undantagshanteraren tar bara emot undantag som inträffar i en enda tråd. Det innebär att om ett __try-block innehåller ett anrop till funktionen CreateProcess eller CreateThread skickas inte undantag som inträffar i den nya processen eller tråden till den här hanteraren.

Systemet utvärderar filteruttrycket för varje undantagshanterare som skyddar koden där undantaget inträffade tills antingen undantaget hanteras eller så finns det inga fler hanterare. Ett filteruttryck måste utvärderas som ett av följande tre värden.

Värde Betydelse
EXCEPTION_EXECUTE_HANDLER Systemet överför kontrollen till undantagshanteraren och körningen fortsätter i stackramen där hanteraren hittas.
EXCEPTION_CONTINUE_SEARCH Systemet fortsätter att söka efter en hanterare.
EXCEPTION_CONTINUE_EXECUTION Systemet stoppar sökningen efter en hanterare och returnerar kontrollen till den punkt då undantaget inträffade. Om undantaget inte kan fortsätta resulterar det i ett EXCEPTION_NONCONTINUABLE_EXCEPTION undantag.

 

Filteruttrycket utvärderas i kontexten för funktionen där undantagshanteraren finns, även om undantaget kan ha inträffat i en annan funktion. Det innebär att filteruttrycket kan komma åt funktionens lokala variabler. På samma sätt kan undantagshanterarblocket komma åt de lokala variablerna för funktionen där den finns.

Fler exempel finns i Använda en undantagshanterare.

Mer information om filteruttryck och filterfunktioner finns i Rambaserad undantagshantering.