Sdílet prostřednictvím


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 CExceptionodvozené 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