Zpracování výjimek v prostředí MFC
Tento článek vysvětluje mechanismy zpracování výjimek dostupné v prostředí MFC. K dispozici jsou dva mechanismy:
Výjimky jazyka C++, dostupné v prostředí MFC verze 3.0 a novější
Makra výjimek MFC, která jsou k dispozici ve verzích MFC 1.0 a novějších
Pokud píšete novou aplikaci pomocí knihovny MFC, měli byste použít mechanismus jazyka C++. Mechanismus založený na makrech můžete použít, pokud už vaše stávající aplikace tento mechanismus používá výrazně.
Existující kód můžete snadno převést tak, aby místo maker výjimek MFC používal výjimky jazyka C++. Výhody převodu kódu a pokynů k tomu jsou popsány v článku Výjimky: Převod z maker výjimek MFC.
Pokud jste již vytvořili aplikaci pomocí maker výjimek MFC, můžete tato makra dál používat ve stávajícím kódu a současně v novém kódu používat výjimky jazyka C++. Článek Výjimky: Změny maker výjimek ve verzi 3.0 poskytují pokyny k tomu.
Poznámka
Pokud chcete povolit zpracování výjimek jazyka C++v kódu, vyberte povolit výjimky jazyka C++ na stránce Generování kódu ve složce C/C++ dialogového okna Stránky vlastností projektu nebo použijte možnost kompilátoru /EHsc.
Tento článek se zabývá následujícími tématy:
Kdy použít výjimky
K třem kategoriím výsledků může dojít, když je funkce volána během provádění programu: normální spuštění, chybné spuštění nebo neobvyklé spuštění. Jednotlivé kategorie jsou popsány níže.
Normální spuštění
Funkce se může spouštět normálně a vracet. Některé funkce vrátí volajícímu kód výsledku, který označuje výsledek funkce. Možné kódy výsledků jsou přísně definovány pro funkci a představují rozsah možných výsledků funkce. Kód výsledku může indikovat úspěch nebo selhání nebo dokonce může indikovat konkrétní typ selhání, který je v normálním rozsahu očekávání. Například funkce stavu souboru může vrátit kód, který označuje, že soubor neexistuje. Všimněte si, že výraz "kód chyby" se nepoužívá, protože kód výsledku představuje jeden z mnoha očekávaných výsledků.
Chybné provádění
Volající dělá chybu při předávání argumentů funkci nebo volá funkci v nevhodném kontextu. Tato situace způsobí chybu a měla by být zjištěna kontrolním výrazem během vývoje programu. (Další informace o kontrolních výrazech najdete v tématu Kontrolní výrazy C/C++.)
Neobvyklé spuštění
Neobvyklé spouštění zahrnuje situace, kdy podmínky mimo kontrolu programu, jako jsou chyby nedostatku paměti nebo vstupně-výstupních operací, ovlivňují výsledek funkce. Neobvyklé situace by se měly zpracovat zachycením a vyvoláním výjimek.
Použití výjimek je obzvláště vhodné pro neobvyklé spuštění.
Podpora výjimek MFC
Bez ohledu na to, zda použijete výjimky jazyka C++ přímo nebo použijete makra výjimek MFC, použijete třídu CException nebo CException
odvozené objekty, které mohou být vyvolány architekturou nebo vaší aplikací.
Následující tabulka uvádí předdefinované výjimky poskytované prostředím MFC.
Exception – třída | Význam |
---|---|
CMemoryException – třída | Nedostatek paměti |
CFileException – třída | Výjimka souboru |
CArchiveException – třída | Výjimka archivace/serializace |
CNotSupportedException – třída | Odpověď na žádost o nepodporovanou službu |
CResourceException – třída | Výjimka přidělení prostředků Systému Windows |
CDaoException – třída | Výjimky databáze (třídy DAO) |
CDBException – třída | Výjimky databáze (třídy ODBC) |
COleException – třída | OLE – výjimky |
COleDispatchException – třída | Výjimky dispatch (automatizace) |
CUserException – třída | Výjimka, která uživatele upozorní na pole se zprávou a pak vyvolá obecnou třídu CException |
Od verze 3.0 používá MFC výjimky jazyka C++, ale stále podporuje jeho starší makra pro zpracování výjimek, jejichž forma se podobá výjimkám jazyka C++. Přestože nejsou tato makra vhodná pro nové programování, jsou z důvodu zpětné kompatibility stále podporována. V aplikacích používajících makra lze volně používat i výjimky jazyka C++. Během předběžného zpracování se makra vyhodnotí jako klíčová slova zpracování výjimek definovaná v implementaci jazyka C++ jazyka MSVC v jazyce Visual C++ verze 2.0. Stávající makra zpracování výjimek lze při použití výjimek jazyka C++ ponechat. Informace o kombinování maker a zpracování výjimek jazyka C++ a o převodu starého kódu na použití nového mechanismu naleznete v článcích Výjimky: Použití maker MFC a výjimek jazyka C++ a výjimek: Převod z maker výjimek MFC. Starší výjimky maker knihovny MFC, pokud je stále používáte, se vyhodnotí jako klíčová slova výjimek jazyka C++. Viz Výjimky: Změny maker výjimek ve verzi 3.0. MFC přímo nepodporuje systém Windows NT strukturované obslužné rutiny výjimek (SEH), jak je popsáno ve strukturovaném zpracování výjimek.
Další informace o výjimkách
Následující články vysvětlují použití knihovny MFC pro předání výjimek:
Následující články porovnávají makra výjimek MFC s klíčovými slovy výjimek jazyka C++ a vysvětlují, jak můžete přizpůsobit kód:
Viz také
Moderní osvědčené postupy jazyka C++ pro výjimky a zpracování chyb