Udostępnij za pośrednictwem


CATCH

Definiuje blok kodu połowy pierwszy typ wyjątku thrown w poprzednim SPRÓBUJ bloku.

CATCH(exception_class, exception_object_pointer_name )

Parametry

  • exception_class
    Określa typ wyjątku do testowania.Wykaz wyjątków standardowych klas można znaleźć klasy CException.

  • exception_object_pointer_name
    Określa nazwę wskaźnik 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 zadeklarowany dla Ciebie.

Uwagi

Kod przetwarzania wyjątku można interrogate obiekt wyjątku, jeśli jest to właściwe uzyskać więcej informacji dotyczących określonego powodu wyjątku.Wywołać THROW_LAST makro przesunięcie przetwarzania do następnej ramki zewnętrzne wyjątek.Koniec SPRÓBUJ zablokować 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łonkowskich, których szczególne wystąpił wyjątek.Lepszym sposobem wychwycić kilka rodzajów wyjątków jest użycie kolejne AND_CATCH z typu wyjątku różnych instrukcji.

Wyjątek wskaźnik do obiektu jest tworzony przez makro.Nie należy deklarować samodzielnie.

[!UWAGA]

Połowu bloku jest zdefiniowana jako zakres C++ nakreślonych 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 makr, zobacz artykuł 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

Zobacz też

Informacje

TRY

AND_CATCH

END_CATCH

THROW (MFC)

THROW_LAST

CATCH_ALL

Klasa CException

Koncepcje

Makra MFC i Globals