Udostępnij za pośrednictwem


Obsługa wyjątków w MFC

W tym artykule wyjaśniono, dostępne w MFC mechanizmów obsługi wyjątków.Dostępne są dwa mechanizmy:

  • Wyjątki C++, MFC wersja 3.0 i nowsze

  • Makra wyjątek MFC MFC wersje 1.0 i później

Jeśli pisania nowej aplikacji przy użyciu MFC, należy użyć mechanizmu C++.Mechanizm oparty makra można użyć, jeśli już istniejąca aplikacja używa mechanizmu wszechstronnie.

Łatwo można przekonwertować istniejący kod używany wyjątki C++ zamiast makra wyjątek MFC.Konwersja kodu i wytycznych w ten sposób korzyści są opisane w artykule Wyjątki: Konwersja z makr wyjątek MFC.

Jeżeli aplikacji przy użyciu makra wyjątek MFC, został już utworzony, możesz kontynuować korzystanie z tych makr w kodzie istniejących w podczas korzystania z wyjątków C++ nowego kodu.Artykuł Wyjątki: Zmiany w makrach wyjątku, w wersji 3.0 daje wskazówki w ten sposób.

[!UWAGA]

Aby włączyć wyjątek C++ obsługi w kodzie, wybierz Włącz wyjątki C++ na stronie generowania kodu w folderze c i C++ projektu Właściwości strony (C++) okno dialogowe lub użyj opcji kompilatora /GX.Wartością domyślną jest /GX–, co spowoduje wyłączenie obsługi wyjątków.

W tym artykule omówiono następujące tematy:

  • Kiedy używać wyjątków

  • Wsparcie MFC

  • Armator wyjątki — informacje

Kiedy używać wyjątków

Trzy kategorie wyników może wystąpić, gdy funkcja jest wywoływana podczas wykonywania programu: normalne wykonanie, wykonanie błędnej lub nienormalne wykonanie.Poniżej opisano każdej kategorii.

  • Normalne wykonanie

    Funkcja może działać normalnie i zwracać.Niektóre funkcje zwracają kod wyniku do wywołującego, która wskazuje wynik funkcji.Kody wyniku są ściśle określone dla funkcji i reprezentuje zakres możliwych rezultatów funkcji.Kod wyniku może wskazywać sukces lub Niepowodzenie lub nawet można wskazać określonego typu błąd, który jest w normalnym zakresie oczekiwań.Na przykład funkcja stan pliku można zwrócić kod, który wskazuje, że plik nie istnieje.Należy zauważyć, że pojęcie "kod błędu" nie jest używana, ponieważ kod wyniku reprezentuje jedną z wielu oczekiwanych wyników.

  • Wykonanie błędnej

    Obiekt wywołujący sprawia, że niektóre pomyłka przekazywanie argumentów funkcji lub wywołuje funkcję w kontekście niewłaściwe.Sytuacja ta powoduje błąd, i powinna zostać wykryta przez podanie podczas rozwoju programu.(Aby uzyskać więcej informacji dotyczących potwierdzeń, zobacz Potwierdzeń.)

  • Wykonanie nieprawidłowej

    Wykonanie nieprawidłowej obejmuje sytuacje, gdy warunki poza kontrolą programu, takich jak brak pamięci lub błędy We/Wy, wpływa na wynik funkcji.Sytuacji anormalnych powinno się obchodzić w połowu i generowania wyjątków.

Za pomocą wyjątków jest szczególnie odpowiednie do wykonania nieprawidłowej.

Wsparcie MFC

Czy użyć bezpośrednio wyjątki C++ lub użyć makra wyjątek MFC, będą używać Klasa CException lub CException-pochodzących z obiektów, które może zostać wygenerowany w ramach lub aplikacji.

W poniższej tabeli przedstawiono wstępnie zdefiniowane wyjątki, świadczone przez MFC.

Klasa wyjątków

Znaczenie

Klasa CMemoryException

Pamięci

Klasa CFileException

Plik wyjątków

Klasa CArchiveException

Wyjątek archiwum/serializacji.

Klasa CNotSupportedException

Odpowiedzi na żądanie dla usługi nieobsługiwane

Klasa CResourceException

Wyjątek alokacji zasobów systemu Windows

Klasa CDaoException

Wyjątki bazy danych (DAO klasy)

Klasa CDBException

Wyjątki bazy danych (ODBC klasy)

Klasa COleException

Wyjątki OLE

Klasa COleDispatchException

Wyjątki wysyłki (automation)

Klasa CUserException

Wyjątek, który ostrzega użytkownika w oknie komunikatu, a następnie generuje rodzajowegoKlasa CException

[!UWAGA]

MFC obsługuje wyjątki C++ i makra wyjątek MFC.MFC nie obsługuje bezpośrednio procedur obsługi wyjątków systemu Windows NT strukturę (SEH), zgodnie z opisem zamieszczonym w Strukturalnej obsługi wyjątków.

Warto przeczytać temat wyjątków

Następujące artykuły wyjaśnić, przy użyciu biblioteki MFC, za wyjątkiem:

Następujące artykuły porównać makra wyjątek MFC za pomocą słów kluczowych wyjątek C++ i wyjaśniono, jak można dostosować swój kod:

Zobacz też

Informacje

Obsługa wyjątków C++

Inne zasoby

Jak I: utworzyć mój własny klas wyjątków niestandardowe?