Ausnahmebehandlung in MFC
In diesem Artikel werden die in MFC verfügbaren Ausnahmebehandlungsmechanismen erläutert. Es stehen zwei Mechanismen zur Verfügung:
C++-Ausnahmen, verfügbar in MFC Version 3.0 und höher
Die MFC-Ausnahmemakros, verfügbar in MFC-Versionen 1.0 und höher
Wenn Sie eine neue Anwendung mit MFC schreiben, sollten Sie den C++-Mechanismus verwenden. Sie können den makrobasierten Mechanismus verwenden, wenn Ihre vorhandene Anwendung diesen Mechanismus bereits umfassend verwendet.
Sie können vorhandenen Code problemlos konvertieren, um C++-Ausnahmen anstelle der MFC-Ausnahmemakros zu verwenden. Die Vorteile der Konvertierung von Code und Richtlinien hierfür werden im Artikel Ausnahmen beschrieben: Konvertieren von MFC-Ausnahmemakros.
Wenn Sie bereits eine Anwendung mit den MFC-Ausnahmemakros entwickelt haben, können Sie diese Makros weiterhin in Ihrem vorhandenen Code verwenden, während Sie C++-Ausnahmen im neuen Code verwenden. Der Artikel Ausnahmen: Änderungen an Ausnahmemakros in Version 3.0 enthalten Richtlinien dafür.
Hinweis
Um die C++-Ausnahmebehandlung in Ihrem Code zu aktivieren, wählen Sie im Dialogfeld "Eigenschaftenseiten" des Projekts die Option "C++-Ausnahmen aktivieren" auf der Seite "Codegenerierung" im Dialogfeld "Eigenschaftenseiten" des Projekts aus, oder verwenden Sie die Option "/EHsc compiler".
In diesem Artikel werden die folgenden Themen behandelt:
Verwendung von Ausnahmen
Drei Kategorien von Ergebnissen können auftreten, wenn eine Funktion während der Programmausführung aufgerufen wird: normale Ausführung, fehlerhafte Ausführung oder abnormale Ausführung. Jede Kategorie wird unten beschrieben.
Normale Ausführung
Die Funktion kann normal ausgeführt und zurückgegeben werden. Einige Funktionen geben einen Ergebniscode an den Aufrufer zurück, der das Ergebnis der Funktion angibt. Die möglichen Ergebniscodes sind für die Funktion streng definiert und stellen den Bereich der möglichen Ergebnisse der Funktion dar. Der Ergebniscode kann auf Erfolg oder Fehler hinweisen oder sogar einen bestimmten Fehlertyp angeben, der sich innerhalb des normalen Erwartungsbereichs befindet. Beispielsweise kann eine Dateistatusfunktion einen Code zurückgeben, der angibt, dass die Datei nicht vorhanden ist. Beachten Sie, dass der Begriff "Fehlercode" nicht verwendet wird, da ein Ergebniscode eines der vielen erwarteten Ergebnisse darstellt.
Fehlerhafte Ausführung
Der Aufrufer macht einen Fehler beim Übergeben von Argumenten an die Funktion oder ruft die Funktion in einem unangemessenen Kontext auf. Diese Situation verursacht einen Fehler und sollte während der Programmentwicklung durch eine Assertion erkannt werden. (Weitere Informationen zu Assertionen finden Sie unter C/C++-Assertionen.)
Abnorme Ausführung
Eine abnormale Ausführung umfasst Situationen, in denen Bedingungen außerhalb der Kontrolle des Programms, z. B. geringen Arbeitsspeicher oder E/A-Fehler, das Ergebnis der Funktion beeinflussen. Ungewöhnliche Situationen sollten behandelt werden, indem Ausnahmen abgefangen und ausgelöst werden.
Die Verwendung von Ausnahmen eignet sich besonders für eine abnorme Ausführung.
MFC-Ausnahmeunterstützung
Unabhängig davon, ob Sie die C++-Ausnahmen direkt verwenden oder die MFC-Ausnahmemakros verwenden, verwenden Sie CException-Klasse oder CException
abgeleitete Objekte, die vom Framework oder von Ihrer Anwendung ausgelöst werden können.
In der folgenden Tabelle sind die vordefinierten Ausnahmen aufgeführt, die von MFC bereitgestellt werden.
Ausnahmeklasse | Bedeutung |
---|---|
CMemoryException-Klasse | Nicht genügend Arbeitsspeicher |
CFileException-Klasse | Datei-Ausnahme |
CArchiveException-Klasse | Ausnahme für Archivierung/Serialisierung |
CNotSupportedException-Klasse | Antwort auf Anforderung für nicht unterstützte Dienste |
CResourceException-Klasse | Ausnahme für die Windows-Ressourcenzuordnung |
CDaoException-Klasse | Datenbank ausnahmen (DAO-Klassen) |
CDBException-Klasse | Datenbank ausnahmen (ODBC-Klassen) |
COleException-Klasse | OLE-Ausnahmen |
COleDispatchException-Klasse | Dispatch -Ausnahmen (Automatisierung) |
CUserException-Klasse | Ausnahme, die den Benutzer mit einem Meldungsfeld benachrichtigt und dann eine generische CException-Klasse auslöst |
Seit Version 3.0 verwendet MFC C++-Ausnahmen, unterstützt jedoch weiterhin die älteren Ausnahmebehandlungsmakros, deren Form der von C++-Ausnahmen ähnelt. Obwohl diese Makros nicht für neue Programmierungen empfohlen werden, werden sie weiterhin zu Zwecken der Abwärtskompatibilität unterstützt. In Programmen, die bereits die Makros verwenden, können Sie C++-Ausnahmen ebenfalls problemlos verwenden. Während der Vorverarbeitung werden die Makros zur Ausnahmebehandlung Schlüsselwort (keyword) in der MSVC-Implementierung der C++-Sprache ab Visual C++ Version 2.0 definierten Ausnahmebehandlung ausgewertet. Sie können vorhandene Ausnahmemakros beibehalten, während Sie beginnen, C++-Ausnahmen zu verwenden. Informationen zum Mischen von Makros und C++-Ausnahmebehandlung und zum Konvertieren von altem Code zur Verwendung des neuen Mechanismus finden Sie in den Artikeln Ausnahmen: Verwenden von MFC-Makros und C++-Ausnahmen: Konvertieren aus MFC-Ausnahmemakros. Bei älteren MFC-Ausnahmemakros, sofern Sie diese noch verwenden, werden C++-Ausnahmeschlüsselwörter ausgewertet. Siehe Ausnahmen: Änderungen an Ausnahmemakros in Version 3.0. MFC unterstützt windows NT-strukturierte Ausnahmehandler (SEH) nicht direkt, wie in der strukturierten Ausnahmebehandlung beschrieben.
Weiteres Lesen zu Ausnahmen
In den folgenden Artikeln wird die Verwendung der MFC-Bibliothek für die Ausnahmehändigung erläutert:
Die folgenden Artikel vergleichen die MFC-Ausnahmemakros mit der C++-Ausnahme Schlüsselwort (keyword) und erläutern, wie Sie Ihren Code anpassen können:
Siehe auch
Bewährte Methoden für moderne C++-Methoden für Ausnahmen und Fehlerbehandlung