CATCH
Definuje blok kódu, který zachytí první typ výjimky vyvolána v předchozím akci blok.
CATCH(exception_class, exception_object_pointer_name )
Parametry
exception_class
Určuje typ výjimky pro testování.Seznam tříd standardních výjimek naleznete v tématu třída CException.exception_object_pointer_name
Určuje název pro objekt výjimky ukazatel, který vytvoří makro.Název ukazatele můžete použít pro přístup k objektu výjimky v rámci ve SKUTEČNÉ blok.Tato proměnná je deklarována pro vás.
Poznámky
Kód zpracování výjimek lze interrogate objekt výjimky, pokud je to vhodné, chcete-li získat další informace o konkrétní příčině výjimky.Volat THROW_LAST posunout do dalšího rámečku vnější výjimka zpracování makra.Konec akci se END_CATCH makra.
Pokud exception_class je třída CException, pak bude být zachyceny všechny typy výjimek.Lze použít CObject::IsKindOf členské funkce pro zjištění, která specifická vyjímka byla vyvolána.Je lepší způsob, jak zachytit výjimky několik druhů použití sekvenční AND_CATCH příkazy, každý typ jiná výjimka.
Makro je vytvořen ukazatel objektu výjimku.Není nutné deklarovat sami.
[!POZNÁMKA]
Ve SKUTEČNÉ blok je definována jako obor C++ vymezen závorkami.Pokud deklarujete proměnné v tomto oboru, jsou přístupné pouze v daném oboru.To platí také pro exception_object_pointer_name.
Další informace o výjimkách a ve SKUTEČNÉ makro, naleznete v článku výjimky.
Příklad
CFile* pFile = NULL;
// Constructing a CFile object with this override may throw
// a CFile exception and won't throw any other exceptions.
// Calling CString::Format() may throw a CMemoryException,
// so we have a catch block for such exceptions, too. Any
// other exception types this function throws will be
// routed to the calling function.
TRY
{
pFile = new CFile(_T( "C:\\WINDOWS\\SYSTEM.INI"),
CFile::modeRead | CFile::shareDenyNone);
ULONGLONG dwLength = pFile->GetLength();
CString str;
str.Format(_T("Your SYSTEM.INI file is %I64u bytes long.") , dwLength);
AfxMessageBox(str);
}
CATCH(CFileException, pEx)
{
// Simply show an error message to the user.
pEx->ReportError();
}
AND_CATCH(CMemoryException, pEx)
{
// We can't recover from this memory exception, so we'll
// just terminate the app without any cleanup. Normally,
// an application should do everything it possibly can to
// clean up properly and not call AfxAbort().
AfxAbort();
}
END_CATCH
// If an exception occurs in the CFile constructor,
// the language will free the memory allocated by new
// and will not complete the assignment to pFile.
// Thus, our cleanup code needs to test for NULL.
if (pFile != NULL)
{
pFile->Close();
delete pFile;
}
Požadavky
Záhlaví: afx.h