Megosztás:


Exception-Handler szintaxis

A rendszer a __try és __except kulcsszavakat használja a keretalapú kivételkezelő létrehozásához. Az alábbi példa egy kivételkezelő struktúráját mutatja be.

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

Vegye figyelembe, hogy a __try blokk és a kivételkezelő blokk kapcsos zárójeleket ({}) igényel. Nem engedélyezett goto utasítás használata egy __try blokk törzsébe vagy egy kivételkezelő blokkba való ugráshoz. Ez a szabály a kivételkezelőkre és a megszakításkezelőkre egyaránt vonatkozik.

A __try blokk tartalmazza a kivételkezelő által védett kódtörzset. A függvények tetszőleges számú kivételkezelővel rendelkezhetnek, és ezek a kivételkezelési utasítások ugyanabban a függvényben vagy különböző függvényekben ágyazhatók be. Ha kivétel történik a __try blokkon belül, a rendszer átveszi az irányítást, és megkezdi a kivételkezelő keresését. A keresés részletes leírását a Kivételkezeléscímű témakörben találja.

A kivételkezelő csak olyan kivételeket fogad, amelyek egyetlen szálon belül fordulnak elő. Ez azt jelenti, hogy ha egy __try blokk meghívja a CreateProcess vagy CreateThread függvényt, a rendszer nem küldi el az új folyamaton vagy szálon belüli kivételeket a kezelőnek.

A rendszer kiértékeli az egyes kivételkezelők szűrőkifejezését, és védi azt a kódot, amelyben a kivétel történt, amíg a kivételt nem kezelik, vagy nincsenek több kezelők. A szűrőkifejezéseket az alábbi három érték egyikeként kell kiértékelni.

Érték Jelentés
EXCEPTION_EXECUTE_HANDLER A rendszer átadja a vezérlőt a kivételkezelőnek, és a végrehajtás abban a veremkeretben folytatódik, amelyben a kezelő található.
EXCEPTION_CONTINUE_SEARCH A rendszer továbbra is keres egy kezelőt.
EXCEPTION_CONTINUE_EXECUTION A rendszer leállítja a kezelő keresését, és visszaadja a vezérlést arra a pontra, ahol a kivétel történt. Ha a kivétel nem kontinuális, ez EXCEPTION_NONCONTINUABLE_EXCEPTION kivételt eredményez.

 

A szűrőkifejezés kiértékelése annak a függvénynek a kontextusában történik, amelyben a kivételkezelő található, annak ellenére, hogy a kivétel egy másik függvényben történt. Ez azt jelenti, hogy a szűrőkifejezés hozzáférhet a függvény helyi változóihoz. Hasonlóképpen, a kivételkezelő blokk hozzáférhet annak a függvénynek a helyi változóihoz, amelyben található.

További példákért lásd: Kivételkezelő használata.

További információ a szűrőkifejezésekről és a szűrőfüggvényekről: Keretalapú kivételkezelés.