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 vašeho kódu a pokyny, jak na to, 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 odhalena asercí během vývoje programu. Další informace o kontrolních výrazech naleznete v tématu C/C++ Kontrolní výrazy.

  • Neobvyklé provedení

    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é provádě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.

Třída výjimka Význam
Třída CMemoryException Nedostatek paměti
Třída CFileException Výjimka při práci se souborem
třída CArchiveException Výjimka archivace/serializace
Třída CNotSupportedException Odpověď na žádost o nepodporovanou službu
Třída CResourceException Výjimka přidělení prostředků Systému Windows
Třída CDaoException Výjimky databáze (třídy DAO)
Třída CDBException Výjimky databáze (třídy ODBC)
COleException třída Výjimky OLE
Třída COleDispatchException Výjimky dispatch (automatizace)
Třída CUserException 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 starší makra zpracování výjimek, která jsou podobná výjimkám jazyka C++ve formě. I když se tato makra nedoporučují pro nové programování, jsou stále podporována kvůli zpětné kompatibilitě. V programech, které už makra používají, můžete volně používat i výjimky jazyka C++. Během předzpracování se makra vyhodnotí na klíčová slova pro zpracování výjimek definovaná v implementaci jazyka C++ v MSVC verzi Visual C++ 2.0. Existující makra výjimek můžete ponechat na místě, když začnete používat výjimky jazyka C++. 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ýjimky: Převod z maker výjimek MFC. Starší makra výjimek MFC, pokud je stále používáte, se vyhodnotí jako klíčová slova výjimek jazyka C++. Viz Výjimky: změny makra výjimek ve verzi 3.0. MFC přímo nepodporuje obslužné rutiny strukturovaných výjimek systému Windows NT (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 zpracová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