Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met een op frame gebaseerde uitzonderingshandler kunt u omgaan met de mogelijkheid dat een uitzondering kan optreden in een bepaalde reeks code. Een op frame gebaseerde uitzonderingshandler bestaat uit de volgende elementen.
- Een beveiligde codetekst
- Een filterexpressie
- Een uitzonderingshandlerblok
Uitzonderingshandlers op basis van frame worden gedeclareerd in taalspecifieke syntaxis. In de Microsoft C/C++ Optimizeing Compiler worden ze bijvoorbeeld geïmplementeerd met behulp van __try en __except. Zie Handler Syntaxvoor meer informatie.
De beveiligde hoofdtekst van code is een set van een of meer instructies waarvoor de filterexpressie en het uitzonderingshandlerblok bescherming bieden tegen het afhandelen van uitzonderingen. Het beveiligde gedeelte kan een codeblok, een set geneste blokken of een volledige procedure of functie zijn. Met behulp van de Microsoft C/C++ Optimizeing Compiler wordt een beveiligde hoofdtekst tussen accolades ({}) geplaatst na het __try trefwoord.
De filterexpressie van een op frame gebaseerde uitzonderingshandler is een expressie die door het systeem wordt geëvalueerd wanneer er een uitzondering optreedt in de beveiligde hoofdtekst. Deze evaluatie resulteert in een van de volgende acties door het systeem.
- Het systeem stopt het zoeken naar een uitzonderingshandler, herstelt de status van de machine en gaat door met de uitvoering van threads op het punt waarop de uitzondering is opgetreden.
- Het systeem blijft zoeken naar een uitzonderingshandler.
- Het systeem draagt het besturingselement over naar de uitzonderingshandler en de uitvoering van threads wordt opeenvolgend voortgezet in het stackframe waarin de uitzonderingshandler wordt gevonden. Als de handler zich niet in het stackframe bevindt waarin de uitzondering zich voordeed, wordt de stack teruggerold, waarbij het huidige stackframe, evenals eventuele andere stackframes, wordt verlaten totdat het terug is bij het stackframe van de uitzonderingshandler. Voordat een uitzonderingshandler wordt uitgevoerd, worden beëindigingshandlers uitgevoerd voor beschermde codeblokken die zijn beëindigd als gevolg van het overdragen van de besturing aan de uitzonderingshandler. Raadpleeg Beëindigingsafhandelingvoor meer informatie over beëindigingshandlers.
De filterexpressie kan een eenvoudige expressie zijn of kan een filterfunctie aanroepen die de uitzondering probeert af te handelen. U kunt de functies GetExceptionCode en Functies GetExceptionInformation aanroepen vanuit een filterexpressie om informatie op te halen over de uitzondering die wordt gefilterd. GetExceptionCode retourneert een code waarmee het type uitzondering wordt geïdentificeerd en GetExceptionInformation- een aanwijzer retourneert naar een EXCEPTION_POINTERS structuur die aanwijzers bevat naar CONTEXT-- en EXCEPTION_RECORD structuren.
Deze functies kunnen niet worden aangeroepen vanuit een filterfunctie, maar hun retourwaarden kunnen worden doorgegeven als parameters aan een filterfunctie. GetExceptionCode kan worden gebruikt binnen het exception handler blok, maar GetExceptionInformation niet omdat de informatie waarnaar het verwijst doorgaans op de stack staat en verdwijnt wanneer de besturing wordt overgedragen aan een uitzonderingshandler. Een toepassing kan de informatie echter kopiëren naar veilige opslag om deze beschikbaar te maken voor de uitzonderingshandler.
Het voordeel van een filterfunctie is dat deze een uitzondering kan verwerken en een waarde kan retourneren die ervoor zorgt dat het systeem doorgaat met de uitvoering vanaf het punt waarop de uitzondering heeft plaatsgevonden. Met een uitzonderingshandlerblok wordt de uitvoering daarentegen opeenvolgend voortgezet vanuit de uitzonderingshandler in plaats van vanaf het punt van de uitzondering.
Het afhandelen van een uitzondering kan zo eenvoudig zijn als het noteren van een fout en het instellen van een vlag die later wordt onderzocht, een waarschuwing of foutbericht afdrukt of een andere beperkte actie onderneemt. Als de uitvoering kan worden voortgezet, kan het ook nodig zijn om de status van de machine te wijzigen door de contextrecord te wijzigen. Zie voor een voorbeeld van een filterfunctie die een paginafout uitzondering afhandelt Gebruik van de virtuele geheugenfuncties.
De functie UnhandledExceptionFilter kan worden gebruikt als filterfunctie in een filterexpressie. Het retourneert EXCEPTION_EXECUTE_HANDLER, tenzij het proces wordt gedebugd, in welk geval het EXCEPTION_CONTINUE_SEARCH retourneert.