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 CException
obiektó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