Undantagshantering i MFC

Den här artikeln förklarar de mekanismer för undantagshantering som är tillgängliga i MFC. Det finns två tillgängliga mekanismer:

  • C++-undantag, tillgängliga i MFC version 3.0 och senare

  • MFC-undantagsmakronen, som är tillgängliga i MFC-versionerna 1.0 och senare

Om du skriver ett nytt program med hjälp av MFC bör du använda C++-mekanismen. Du kan använda den makrobaserade mekanismen om ditt befintliga program redan använder den mekanismen i stor utsträckning.

Du kan enkelt konvertera befintlig kod för att använda C++-undantag i stället för MFC-undantagsmakronen. Fördelarna med att konvertera din kod och riktlinjer för att göra det beskrivs i artikeln Undantag: Konvertera från MFC-undantagsmakron.

Om du redan har utvecklat ett program med MFC-undantagsmakronen kan du fortsätta använda dessa makron i din befintliga kod, samtidigt som du använder C++-undantag i den nya koden. Artikeln Undantag: Ändringar av undantagsmakron i version 3.0 innehåller riktlinjer för detta.

Anmärkning

Om du vill aktivera C++-undantagshantering i koden väljer du Aktivera C++-undantag på sidan Kodgenerering i C/C++-mappen i dialogrutan Egenskapssidor för projektet eller använder kompilatoralternativet /EHsc .

Den här artikeln beskriver följande avsnitt:

När undantag ska användas

Tre kategorier av resultat kan inträffa när en funktion anropas under programkörningen: normal körning, felaktig körning eller onormal körning. Varje kategori beskrivs nedan.

  • Normal körning

    Funktionen kan köras normalt och returneras. Vissa funktioner returnerar en resultatkod till anroparen, vilket anger resultatet av funktionen. De möjliga resultatkoderna är strikt definierade för funktionen och representerar intervallet för möjliga resultat för funktionen. Resultatkoden kan indikera lyckade eller misslyckade eller kan även indikera en viss typ av fel som ligger inom det normala intervallet av förväntningar. En filstatusfunktion kan till exempel returnera en kod som anger att filen inte finns. Observera att termen "felkod" inte används eftersom en resultatkod representerar ett av många förväntade resultat.

  • Felaktig exekvering

    Anroparen gör ett misstag när argument skickas till funktionen eller anropar funktionen i en olämplig kontext. Den här situationen orsakar ett fel och bör identifieras av ett intyg under programutvecklingen. Mer information om kontroller finns i C/C++-försäkran.

  • Onormalt utförande

    Onormal körning omfattar situationer där villkor utanför programmets kontroll, till exempel minnesbrist eller I/O-fel, påverkar resultatet av funktionen. Onormala situationer bör hanteras genom att fånga och utlösa undantag.

Användning av undantag är särskilt lämpligt för avvikande exekvering.

Stöd för MFC-undantag

Oavsett om du använder C++-undantagen direkt eller använder MFC-undantagsmakronen använder du CException-klassen eller CException-härledda objekt som kan utlösas av ramverket eller av ditt program.

I följande tabell visas de fördefinierade undantag som tillhandahålls av MFC.

Undantagsklass Innebörd
CMemoryException-klass Slut på minne
CFileException-klassen Filundantag
Klassen CArchiveException Arkiv- och serialiseringsundantag
CNotSupportedException-klass Svar på begäran om tjänst som inte stöds
CResourceException-klass Undantag för Windows-resursallokering
CDaoException-klass Databasundantag (DAO-klasser)
CDBException-klass Databasfel (ODBC-klasser)
COleException-klass OLE-undantag
COleDispatchException-klass Undantag för dispatch (automation)
CUserException-klass Undantag som varnar användaren med en meddelanderuta och sedan genererar en allmän CException-klass

Sedan version 3.0 har MFC använt C++-undantag men stöder fortfarande äldre undantagshantering av makron, som liknar C++-undantag i form. Även om dessa makron inte rekommenderas för ny programmering stöds de fortfarande för bakåtkompatibilitet. I program som redan använder makron kan du också fritt använda C++-undantag. Under förbearbetningen utvärderas makrona till nyckelorden för undantagshantering som definierats i MSVC-implementeringen av C++-språket från och med Visual C++ version 2.0. Du kan lämna befintliga undantagsmakron på plats när du börjar använda C++-undantag. Information om hur du blandar makron och C++-undantagshantering och konverterar gammal kod för att använda den nya mekanismen finns i artiklarna Undantag: Använda MFC-makron och C++-undantag och undantag: Konvertera från MFC-undantagsmakron. De äldre MFC-undantagsmakronen utvärderas till C++-undantagsnyckelord om du fortfarande använder dem. Se Undantag: Ändringar i undantagsmakron i version 3.0. MFC har inte direkt stöd för Windows NT-strukturerade undantagshanterare (SEH), enligt beskrivningen i Strukturerad undantagshantering.

Läs mer om undantag

Följande artiklar förklarar hur du använder MFC-biblioteket för undantagshantering:

I följande artiklar jämförs MFC-undantagsmakronen med C++-undantagsnyckelorden och förklarar hur du kan anpassa koden:

Se även

Moderna metodtips för C++ för undantag och felhantering