Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Opmerking
De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
De basisklasse voor alle uitzonderingen in de Microsoft Foundation Class Library.
Syntaxis
class AFX_NOVTABLE CException : public CObject
Leden
Openbare constructors
| Naam | Description |
|---|---|
CException::CException |
Maakt een CException object. |
Openbare methoden
| Naam | Description |
|---|---|
CException::Delete |
Hiermee verwijdert u een CException object. |
CException::ReportError |
Rapporteert een foutbericht in een berichtvak aan de gebruiker. |
Opmerkingen
Omdat CException dit een abstracte basisklasse is, kunt u geen objecten rechtstreeks maken CException . U moet objecten van afgeleide klassen maken. Als u uw eigen CExceptionklasse -style wilt maken, gebruikt u een van de hierboven genoemde afgeleide klassen als model. Zorg ervoor dat uw afgeleide klasse ook wordt gebruikt IMPLEMENT_DYNAMIC.
De afgeleide klassen en hun beschrijvingen worden hieronder vermeld:
| Naam | Description |
|---|---|
CSimpleException |
Een basisklasse voor resourcekritische MFC-uitzonderingen |
CInvalidArgException |
Ongeldige uitzonderingsvoorwaarde voor argumenten |
CMemoryException |
Uitzondering buiten het geheugen |
CNotSupportedException |
Aanvraag voor een niet-ondersteunde bewerking |
CArchiveException |
Archiefspecifieke uitzondering |
CFileException |
Bestandsspecifieke uitzondering |
CResourceException |
Windows-resource is niet gevonden of kan niet worden creatable |
COleException |
OLE-uitzondering |
CDBException |
Databaseuitzondering (uitzonderingsvoorwaarden die voortvloeien uit MFC-databaseklassen op basis van Open Database Connectivity) |
COleDispatchException |
OLE-verzendings-uitzondering (automatisering) |
CUserException |
Uitzondering die aangeeft dat een resource niet kan worden gevonden |
CDaoException |
Uitzondering voor gegevenstoegangsobjecten (dat wil gezegd, uitzonderingsvoorwaarden die voortvloeien uit DAO-klassen) |
CInternetException |
Internetuitzondering (dat wil gezegd, uitzonderingsvoorwaarden die voortvloeien uit internetklassen). |
Deze uitzonderingen zijn bedoeld voor gebruik met de THROWmacro's , , THROW_LASTen and_catchtrycatchend_catch macro's. Zie Uitzonderingsverwerking of zie het artikel Exception Handling (MFC) voor meer informatie over uitzonderingen.
Als u een specifieke uitzondering wilt ondervangen, gebruikt u de juiste afgeleide klasse. Als u alle soorten uitzonderingen wilt ondervangen, gebruikt CExceptionu en gebruikt u CObject::IsKindOf deze om onderscheid te maken tussen CException-afgeleide klassen. Houd er rekening mee dat CObject::IsKindOf alleen werkt voor klassen die zijn gedeclareerd met de IMPLEMENT_DYNAMIC macro, om te profiteren van dynamische typecontrole. Elke CExceptionafgeleide klasse die u maakt, moet ook de IMPLEMENT_DYNAMIC macro gebruiken.
U kunt details over uitzonderingen voor de gebruiker rapporteren door twee lidfuncties aan te roepen GetErrorMessage die ReportErrormet een van CExceptionde afgeleide klassen werken.
Als een uitzondering wordt opgevangen door een van de macro's, wordt het CException object automatisch verwijderd. Verwijder het niet zelf. Als een uitzondering wordt afgevangen met behulp van een catch trefwoord, wordt deze niet automatisch verwijderd. Zie het artikel Exception Handling (MFC) voor meer informatie over het verwijderen van een uitzonderingsobject.
Overnamehiƫrarchie
CException
Requirements
Rubriek:afx.h
CException::CException
Met deze lidfunctie wordt een CException object samengesteld.
explicit CException(BOOL bAutoDelete);
Parameterwaarden
b_AutoDelete
Geef op TRUE of het geheugen voor het CException object is toegewezen aan de heap. Hierdoor wordt het CException object verwijderd wanneer de Delete lidfunctie wordt aangeroepen om de uitzondering te verwijderen. Geef op FALSE of het CException object zich op de stapel bevindt of een globaal object is. In dit geval wordt het CException object niet verwijderd wanneer de Delete lidfunctie wordt aangeroepen.
Opmerkingen
Normaal gesproken hoeft u deze constructor nooit rechtstreeks aan te roepen. Een functie die een uitzondering genereert, moet een exemplaar van een CException-afgeleide klasse maken en de constructor aanroepen, of een van de MFC-throwfuncties gebruiken, zoals AfxThrowFileException, om een vooraf gedefinieerd type te genereren. Deze documentatie is alleen volledig.
CException::Delete
Met deze functie wordt gecontroleerd of het CException object is gemaakt op de heap en zo ja, wordt de delete operator voor het object aangeroepen.
void Delete();
Opmerkingen
Wanneer u een CException object verwijdert, gebruikt u de Delete lidfunctie om de uitzondering te verwijderen. Gebruik de delete operator niet rechtstreeks, omdat het CException object mogelijk een globaal object is of is gemaakt op de stack.
U kunt opgeven of het object moet worden verwijderd wanneer het object is samengesteld. Zie CException::CException voor meer informatie.
U hoeft alleen aan te roepen Delete als u het C++ try- catch -mechanisme gebruikt. Als u de MFC-macro's TRY gebruikt en CATCHdeze macro's worden deze functie automatisch aangeroepen.
Example
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.
// Note that this example performs the same actions as the
// example for CATCH, but uses C++ try/catch syntax instead
// of using the MFC TRY/CATCH macros. This sample must use
// CException::Delete() to delete the exception objects
// before closing the catch block, while the CATCH example
// implicitly performs the deletion via the macros.
try
{
pFile = new CFile(_T("C:\\WINDOWS\\SYSTEM.INI"),
CFile::modeRead | CFile::shareDenyNone);
ULONGLONG ullLength = pFile->GetLength();
CString str;
str.Format(_T("Your SYSTEM.INI file is %u bytes long."), ullLength);
AfxMessageBox(str);
}
catch(CFileException* pEx)
{
// Simply show an error message to the user.
pEx->ReportError();
pEx->Delete();
}
catch(CMemoryException* pEx)
{
// We can't recover from this memory exception, so we'll
// just terminate the app without any cleanup. Normally, an
// an application should do everything it possibly can to
// clean up properly and _not_ call AfxAbort().
pEx->Delete();
AfxAbort();
}
// 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 clean-up code needs to test for NULL.
if (pFile != NULL)
{
pFile->Close();
delete pFile;
}
CException::ReportError
Roep deze lidfunctie aan om fouttekst in een berichtvak aan de gebruiker te melden.
virtual int ReportError(
UINT nType = MB_OK,
UINT nMessageID = 0);
Parameterwaarden
nType
Hiermee geeft u de stijl van het berichtvak. Pas een combinatie van de berichtvakstijlen toe op het vak. Als u deze parameter niet opgeeft, is de standaardwaarde MB_OK.
nMessageID
Hiermee geeft u de resource-id (tekenreekstabelvermelding) van een bericht op dat moet worden weergegeven als het uitzonderingsobject geen foutbericht heeft. Als 0 wordt het bericht 'Er is geen foutbericht beschikbaar' weergegeven.
Retourwaarde
Een AfxMessageBox waarde; anders 0 als er onvoldoende geheugen is om het berichtvak weer te geven. Zie AfxMessageBox voor de mogelijke retourwaarden.
Example
Hier volgt een voorbeeld van het gebruik van CException::ReportError. Zie het voorbeeld voor een ander voorbeeld voor CATCH.
CFile fileInput;
CFileException ex;
// try to open a file for reading.
// The file will certainly not
// exist because there are too many explicit
// directories in the name.
// if the call to Open() fails, ex will be
// initialized with exception
// information. the call to ex.ReportError() will
// display an appropriate
// error message to the user, such as
// "\Too\Many\Bad\Dirs.DAT contains an
// invalid path." The error message text will be
// appropriate for the
// file name and error condition.
if (!fileInput.Open(_T("\\Too\\Many\\Bad\\Dirs.DAT"), CFile::modeRead, &ex))
{
ex.ReportError();
}
else
{
// the file was opened, so do whatever work
// with fileInput we were planning...
fileInput.Close();
}