Sdílet prostřednictvím


Výjimky: Převod z makra výjimku MFC

Toto je rozšířená.

Tento článek vysvětluje, jak převést existující kód napsaný s makra Microsoft Foundation Class – akci, úlovku, VYVOLÁNÍMatd – pomocí klíčových slov jazyka C++ zpracování výjimek akci, úlovku, a throw.Témata zahrnují:

  • Výhody převodu

  • Převod kódu s výjimkou maker používat výjimky C++

Výhody převodu

Pravděpodobně nepotřebujete převést existující kód, přestože by měla být vědoma rozdíly mezi implementacemi makro v MFC verze 3.0 a implementace v předchozích verzích.Tyto rozdíly a následné změny v chování kódu jsou popsány v výjimky: změny makra výjimku ve verzi 3.0.

Převod hlavní výhody jsou:

  • Kompiluje kód, který používá klíčových slov jazyka C++ zpracování výjimek k poněkud menší.EXE nebo.DLL.

  • Klíčových slov jazyka C++ zpracování výjimek jsou univerzálnější: jejich zpracování výjimek libovolný datový typ, který lze kopírovat (int, plovoucí, char, atd) k tomu, že makra popisovač výjimky pouze pro třídy CException a třídy odvozené od něj.

Hlavní rozdíl mezi maker a klíčová slova je, že odstraní kód makra pomocí "automaticky" zachytil výjimku při výjimku dostane mimo rozsah.Kód pomocí klíčových slov není, tak musíte explicitně odstranit zachytil výjimku.Další informace naleznete v článku výjimky: výjimky odlovy a odstraňování.

Dalším rozdílem je syntaxe.Syntaxe pro makra a klíčová slova se liší ve třech ohledech:

  1. Makro argumenty a prohlášení o výjimce:

    A úlovku makro vyvolání má následující syntaxi:

    CATCH (exception_class, exception_object_pointer_name)

    Všimněte si čárka název třídy a ukazatel název objektu.

    Prohlášení o výjimku úlovku klíčové slovo používá následující syntaxi:

    catch (exception_typeexception_name)

    Toto prohlášení prohlášení výjimku označuje typ výjimky úlovku blokovat úchyty.

  2. Vymezení bloky catch:

    S makry úlovku makro (argumenty) začíná první blok catch; AND_CATCH bloky catch následné začíná makro a END_CATCH makro ukončí posloupnost bloky catch.

    Pomocí klíčových slov úlovku klíčové slovo (s jeho prohlášením výjimka) začíná každý blok catch.Neexistuje žádný protějškem END_CATCH makra. bloku catch končí jeho pravá složená závorka.

  3. Throw výraz:

    Použití maker THROW_LAST k opětné vyvolání výjimky aktuální.throw Klíčové slovo s žádný argument má stejný účinek.

Provedení převodu

Převést kód pomocí klíčových slov jazyka C++ zpracování výjimek pomocí maker

  1. Vyhledejte všechny výskyty MFC makra akci, úlovku, AND_CATCH, END_CATCH, VYVOLÁNÍM, a THROW_LAST.

  2. Nahradit nebo odstranit všechny výskyty následující makra:

    Zkuste (nahradit akci)

    CATCH (nahradit úlovku)

    AND_CATCH(Nahradit úlovku)

    END_CATCH(Odstranit)

    VYVOLÁNÍM (nahradit throw)

    THROW_LAST(Nahradit throw)

  3. Argumenty makro upravte, aby prohlášení platnou výjimku tvoří.

    Například změnit.

    CATCH(CException, e)
    

    na hodnotu

    catch(CException* e)
    
  4. Upravte kód v bloky catch tak odstraní objekty výjimku podle potřeby.Další informace naleznete v článku výjimky: výjimky odlovy a odstraňování.

Zde je příklad kódu zpracování výjimek pomocí makra MFC výjimku.Všimněte si, že kód v následujícím příkladu používá makra výjimku e automaticky odstraněny:

TRY
{
   // Do something to throw an exception.
   AfxThrowUserException();
}
CATCH(CException, e)
{
   if (m_bPassExceptionsUp)
      THROW_LAST();

   if (m_bReturnFromThisFunction)
      return;

   // Not necessary to delete the exception e.
}
END_CATCH

Kód v následujícím příkladu používá klíčových slov jazyka C++ výjimek proto musí výslovně odstranit výjimku:

try
{
   // Do something to throw an exception.
   AfxThrowUserException();
}
catch(CException* e)
{
   if (m_bPassExceptionsUp)
      throw;

   if (m_bThrowDifferentException)
   {
      e->Delete();
      throw new CMyOtherException;
   }

   if (m_bReturnFromThisFunction)
   {
      e->Delete();
      return;
   }

   e->Delete();
}

Další informace naleznete v výjimky: pomocí makra MFC a výjimky C++.

Viz také

Koncepty

Zpracování výjimek v MFC