Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det är möjligt att använda MFC-undantagshanteringsparadigmet enbart för att fånga undantag som genereras av funktioner i MFC eller andra bibliotek. Förutom att fånga undantag som genereras av bibliotekskod kan du utlösa undantag från din egen kod om du skriver funktioner som kan stöta på exceptionella villkor.
När ett undantag utlöses stoppas körningen av den aktuella funktionen och hoppar direkt till catch blocket i den innersta undantagsramen. Undantagsmekanismen kringgår den normala avslutssökvägen från en funktion. Därför måste du vara noga med att ta bort de minnesblock som skulle tas bort i en normal utgång.
Kasta ett undantag
Använd en av MFC-hjälpfunktionerna, till exempel
AfxThrowMemoryException. Dessa funktioner genererar ett förallokerat undantagsobjekt av lämplig typ.I följande exempel försöker en funktion allokera två minnesblock och utlöser ett undantag om endera allokeringen misslyckas:
{ 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); }Om den första allokeringen misslyckas kan du helt enkelt utlösa minnesundantaget. Om den första allokeringen lyckas men den andra misslyckas måste du frigöra det första allokeringsblocket innan undantaget kastas. Om båda allokeringarna lyckas kan du fortsätta normalt och frigöra blocken när du avslutar funktionen.
- eller-
Använd ett användardefinierat undantag för att ange ett problemtillstånd. Du kan kasta ett objekt av vilken typ som helst, till och med en hel klass, som ditt undantag.
I följande exempel försöker man spela upp ett ljud via en ljudenhet och utlöser ett undantag om det uppstår ett fel.
#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; }
Anmärkning
MFC:s standardhantering av undantag gäller endast pekare för CException objekt (och objekt av CException-härledda klasser). Exemplet ovan kringgår MFC:s undantagsmekanism.