Udostępnij za pośrednictwem


Obsługa wyjątków w MFC

W tym artykule opisano mechanizmy obsługi wyjątków dostępne w MFC. Dostępne są dwa mechanizmy:

  • Wyjątki języka C++ dostępne w MFC w wersji 3.0 lub nowszej

  • Makra wyjątków MFC dostępne w MFC w wersji 1.0 lub nowszej

Jeśli piszesz nową aplikację przy użyciu MFC, użyj mechanizmu C++. Możesz użyć mechanizmu opartego na makrach, jeśli istniejąca aplikacja korzysta już z tego mechanizmu w szerokim zakresie.

Możesz łatwo przekonwertować istniejący kod, aby używać wyjątków języka C++ zamiast makr wyjątków MFC. Zalety konwertowania kodu i wytycznych dotyczących tego sposobu opisano w artykule Wyjątki: konwertowanie z makr wyjątków MFC.

Jeśli masz już utworzoną aplikację przy użyciu makr wyjątków MFC, możesz nadal używać tych makr w istniejącym kodzie, używając wyjątków języka C++ w nowym kodzie. Artykuł Wyjątki: zmiany w makrach wyjątków w wersji 3.0 zawiera wskazówki dotyczące tego działania.

Uwaga

Aby włączyć obsługę wyjątków języka C++ w kodzie, wybierz pozycję Włącz wyjątki języka C++ na stronie Generowanie kodu w folderze C/C++ okna dialogowego Strony właściwości projektu lub użyj opcji /EHsc kompilatora.

W tym artykule opisano następujące tematy:

Kiedy należy używać wyjątków

Trzy kategorie wyników mogą wystąpić, gdy funkcja jest wywoływana podczas wykonywania programu: normalne wykonanie, błędne wykonanie lub nieprawidłowe wykonanie. Każda kategoria jest opisana poniżej.

  • Normalne wykonywanie

    Funkcja może być wykonywana normalnie i zwracana. Niektóre funkcje zwracają kod wyniku do obiektu wywołującego, który wskazuje wynik funkcji. Możliwe kody wyników są ściśle zdefiniowane dla funkcji i reprezentują zakres możliwych wyników funkcji. Kod wyniku może wskazywać powodzenie lub niepowodzenie, a nawet wskazać określony typ błędu, który mieści się w normalnym zakresie oczekiwań. Na przykład funkcja file-status może zwrócić kod wskazujący, że plik nie istnieje. Należy pamiętać, że termin "kod błędu" nie jest używany, ponieważ kod wyniku reprezentuje jeden z wielu oczekiwanych wyników.

  • Błędne wykonanie

    Obiekt wywołujący popełnia błąd podczas przekazywania argumentów do funkcji lub wywołuje funkcję w niewłaściwym kontekście. Taka sytuacja powoduje błąd i powinna zostać wykryta przez asercji podczas opracowywania programu. (Aby uzyskać więcej informacji na temat asercji, zobacz Asercji języka C/C++)

  • Nietypowe wykonywanie

    Nietypowe wykonywanie obejmuje sytuacje, w których warunki poza kontrolą programu, takie jak mała ilość pamięci lub błędy we/wy, wpływają na wynik funkcji. Nietypowe sytuacje powinny być obsługiwane przez przechwytywanie i zgłaszanie wyjątków.

Używanie wyjątków jest szczególnie odpowiednie w przypadku nietypowego wykonywania.

Obsługa wyjątków MFC

Niezależnie od tego, czy używasz wyjątków języka C++ bezpośrednio, czy używasz makr wyjątków MFC, użyjesz klasy CException lub CExceptionobiektów pochodnych, które mogą być zgłaszane przez strukturę lub aplikację.

W poniższej tabeli przedstawiono wstępnie zdefiniowane wyjątki udostępniane przez MFC.

Klasa wyjątku Znaczenie
Klasa CMemoryException Brak pamięci
Klasa CFileException Wyjątek pliku
Klasa CArchiveException Wyjątek archiwizacji/serializacji
Klasa CNotSupportedException Odpowiedź na żądanie nieobsługiwanej usługi
Klasa CResourceException Wyjątek alokacji zasobów systemu Windows
Klasa CDaoException Wyjątki bazy danych (klasy DAO)
Klasa CDBException Wyjątki bazy danych (klasy ODBC)
Klasa COleException wyjątki OLE
Klasa COleDispatchException Wyjątki wysyłania (automatyzacji)
Klasa CUserException Wyjątek ostrzegający użytkownika za pomocą pola komunikatu, a następnie zgłasza ogólną klasę CException

Od wersji 3.0, MFC wykorzystuje wyjątki C++, ale nadal obsługuje jego starsze makra obsługi wyjątków, które mają podobną formę do wyjątków C++. Chociaż wykorzystanie tych makr nie jest zalecane w przypadku nowych programów, nadal są one obsługiwane w celu zapewnienia zgodności z poprzednimi wersjami. W programach, które już używają makr, można bez ograniczeń wykorzystywać również wyjątki C++. Podczas przetwarzania wstępnego makra oceniają słowa kluczowe obsługi wyjątków zdefiniowane w implementacji języka C++ W języku C++ w wersji 2.0. Podczas korzystania z języka C++, można pozostawić na miejscu istniejące makra wyjątków. Aby uzyskać informacje na temat mieszania makr i obsługi wyjątków języka C++ oraz konwertowania starego kodu w celu użycia nowego mechanizmu, zobacz artykuły Wyjątki: Używanie makr MFC i wyjątków języka C++: Konwertowanie z makr wyjątków MFC. Starsze makra wyjątków MFC, jeżeli użytkownik nadal z nich korzysta, szacowane są jako słowa kluczowe wyjątków języka C++. Zobacz Wyjątki: zmiany makr wyjątków w wersji 3.0. MFC nie obsługuje bezpośrednio procedur obsługi wyjątków strukturalnych systemu Windows NT (SEH), zgodnie z opisem w temacie Obsługa wyjątków strukturalnych.

Dalsze informacje na temat wyjątków

W poniższych artykułach opisano używanie biblioteki MFC do przekazywania wyjątków:

W poniższych artykułach porównaliśmy makra wyjątków MFC ze słowami kluczowymi wyjątków języka C++ i wyjaśniono, jak można dostosować kod:

Zobacz też

Nowoczesne najlepsze rozwiązania dotyczące języka C++ dotyczące wyjątków i obsługi błędów