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.
Opmerking
De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
Het is mogelijk om het MFC-uitzonderingsverwerkingsparadigma alleen te gebruiken om uitzonderingen te ondervangen die worden gegenereerd door functies in MFC of andere bibliotheken. Naast het ondervangen van uitzonderingen die worden gegenereerd door bibliotheekcode, kunt u uitzonderingen van uw eigen code genereren als u functies schrijft die uitzonderlijke omstandigheden kunnen tegenkomen.
Wanneer er een uitzondering wordt gegenereerd, wordt de uitvoering van de huidige functie gestopt en springt deze rechtstreeks naar het catch blok van het binnenste uitzonderingsframe. Het uitzonderingsmechanisme omzeilt de normale uitstaproute van een functie. Daarom moet u ervoor zorgen dat u deze geheugenblokken verwijdert die in een normale uitgang worden verwijderd.
Een uitzondering opwerpen
Gebruik een van de MFC-helperfuncties, zoals
AfxThrowMemoryException. Met deze functies wordt een vooraf toegewezen uitzonderingsobject van het juiste type gegenereerd.In het volgende voorbeeld probeert een functie twee geheugenblokken toe te wijzen en genereert een uitzondering als een van de toewijzingen mislukt:
{ char* p1 = (char*)malloc(SIZE_FIRST); if (p1 == NULL) AfxThrowMemoryException(); char* p2 = (char*)malloc(SIZE_SECOND); if (p2 == NULL) { free(p1); AfxThrowMemoryException(); } // ... Do something with allocated blocks ... // In normal exit, both blocks are deleted. free(p1); free(p2); }Als de eerste toewijzing mislukt, kunt u gewoon de geheugenuitzondering genereren. Als de eerste toewijzing is geslaagd, maar de tweede mislukt, moet u het eerste toewijzingsblok vrijmaken voordat u de uitzondering genereert. Als beide toewijzingen slagen, kunt u normaal doorgaan en de blokken vrijmaken bij het afsluiten van de functie.
- of-
Gebruik een door de gebruiker gedefinieerde uitzondering om een probleemvoorwaarde aan te geven. U kunt een item van elk type, zelfs een hele klasse, als uitzondering gooien.
In het volgende voorbeeld wordt geprobeerd een geluid af te spelen via een audioapparaat en wordt een uitzondering opgegooid als er een fout optreedt.
#define WAVE_ERROR -5 { // This Win32 API returns 0 if the sound cannot be played. // Throw an integer constant if it fails. if (!PlaySound(_T("SIREN.WAV"), NULL, SND_ASYNC)) throw WAVE_ERROR; }
Opmerking
De standaardafhandeling van uitzonderingen van MFC is alleen van toepassing op aanwijzers op CException objecten (en objecten van CExceptionafgeleide klassen). In het bovenstaande voorbeeld wordt het uitzonderingsmechanisme van MFC overgeslagen.