CATCH
Definiuje bloku kodu, że połowy pierwszego typu wyjątku wyrzucony w poprzednim SPRÓBUJ bloku.
CATCH(exception_class, exception_object_pointer_name )
Parametry
exception_class
Określa typ wyjątku do testowania.Zawiera listę standardowych wyjątek klas, klasa CException.exception_object_pointer_name
Określa nazwę wskaźnika obiekt wyjątku, który zostanie utworzony przez makro.Można użyć nazwy wskaźnika dostępu do obiektu wyjątek w połowu bloku.Ta zmienna jest zadeklarowana za Ciebie.
Uwagi
Kod wyjątku przetwarzania można interrogate obiekt wyjątku, jeśli jest to właściwe uzyskać więcej informacji na temat określonego powodu wyjątku.Wywołać THROW_LAST makro spowoduje przejście do następnej ramki zewnętrznej wyjątek przetwarzania.Koniec SPRÓBUJ blok z END_CATCH makro.
Jeśli exception_class jest klasą CException, a następnie wszystkie typy wyjątek zostanie przechwycony.Można użyć CObject::IsKindOf funkcji członka, aby ustalić, które szczególne wyjątek.Lepszym sposobem złapać kilka rodzajów wyjątków jest użycie sekwencyjnego AND_CATCH z typ wyjątku różnych instrukcji.
Wskaźnik do obiektu wyjątek jest tworzony przez makro.Nie trzeba zadeklarować samodzielnie.
[!UWAGA]
Połowu blok jest zdefiniowany jako zakres C++, nakreślonego przez nawiasy klamrowe.Przy deklarowaniu zmiennych w tym zakresie, są one dostępne tylko w ramach tego zakresu.Dotyczy to także exception_object_pointer_name.
Aby uzyskać więcej informacji dotyczących wyjątków i połowu makro, zapoznaj się z artykułem Wyjątki.
Przykład
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;
}
Wymagania
Nagłówek: afx.h