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 CExceptionabgeleitete 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