Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais

CATCH

 

Définit un bloc de code qui intercepte le premier type d'exception levé dans le bloc TRY précédent.


CATCH(
exception_class
, 
exception_object_pointer_name )

classe d'exception

Spécifie le type d'exception à tester.Pour une liste des classes standard d'exception, consultez la classe CException.

exception_object_pointer_name

Spécifie le nom du pointeur de l'objet exception qui est créé par la macro.Vous pouvez utiliser le nom du pointeur pour accéder à l'objet exception dans le bloc CATCH.Cette variable est déclarée pour vous.

Le code d'exception- PROCESSING peut interroger l'objet exception, le cas échéant, pour obtenir plus d'informations sur la cause spécifique de l'exception.Appelez la macro THROW_LAST pour déplacer le traitement vers le prochain cadre externe d'exception.Fermez le bloc de TRY avec une macro de END_CATCH.

Si les exception_class est la classe CException, tous les types d'exception sont interceptés.Vous pouvez utiliser la fonction membre CObject::IsKindOf pour déterminer quelle exception spécifique a été levée.Une meilleure méthode pour intercepter plusieurs types d'exceptions consiste à utiliser les instructions séquentielles AND_CATCH, chacune avec un type d'exception différent.

Le pointeur d'objet exception est créé par la macro.Vous n"avez pas besoin de le déclarer vous même.

System_CAPS_noteRemarque

Le bloc CATCH est défini comme une portée C ++ (délimité par des accolades).Si vous déclarez des variables dans cette étendue, elles sont accessibles uniquement dans cette étendue.Cela s'applique également à l'exception_object_pointer_name.

Pour plus d'informations sur les exceptions et la macro de CATCH, consultez l'article Exceptions.

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;
}

Configuration requise

En-tête : afx.h

Afficher: