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.
Wanneer een programma wordt uitgevoerd, kunnen er een aantal abnormale omstandigheden en fouten met de naam 'uitzonderingen' optreden. Dit kan bijvoorbeeld gaan om onvoldoende geheugen, resourcetoewijzingsfouten en het niet vinden van bestanden.
De Microsoft Foundation Class Library maakt gebruik van een uitzonderingsafhandelingsschema dat nauw is gemodelleerd naar het model dat is voorgesteld door het ANSI-standaardencomité voor C++. Een uitzonderingshandler moet worden ingesteld voordat u een functie aanroept die een abnormale situatie kan ondervinden. Als de functie een abnormale toestand tegenkomt, genereert deze een uitzondering en wordt er een controle doorgegeven aan de uitzonderingshandler.
Verschillende macro's die deel uitmaken van de Microsoft Foundation Class Library, stellen uitzonderingshandlers in. Een aantal andere globale functies helpt bij het genereren van gespecialiseerde uitzonderingen en het beëindigen van programma's, indien nodig. Deze macro's en globale functies vallen in de volgende categorieën:
Uitzonderingsmacro's, die uw uitzonderingshandler structuren.
Functies voor het genereren van uitzonderingen), waarmee uitzonderingen van specifieke typen worden gegenereerd.
Beëindigingsfuncties, waardoor programma-beëindiging wordt veroorzaakt.
Zie het artikel Uitzonderingen voor voorbeelden en meer informatie.
Uitzonderingsmacro's
| Naam | Description |
|---|---|
| PROBEREN | Hiermee wordt een codeblok voor uitzonderingsverwerking aangewezen. |
| VANGEN | Hiermee wordt een codeblok aangewezen voor het vangen van een uitzondering van het voorgaande TRY-blok . |
| CATCH_ALL | Hiermee wordt een codeblok aangewezen voor het opsporen van alle uitzonderingen van het voorgaande TRY-blok . |
| AND_CATCH | Hiermee wordt een codeblok aangewezen voor het vangen van extra uitzonderingstypen uit het voorgaande TRY-blok . |
| AND_CATCH_ALL | Hiermee wordt een codeblok aangewezen voor het vangen van alle andere extra uitzonderingstypen die zijn gegenereerd in een voorgaande TRY-blok . |
| END_CATCH | Hiermee wordt het laatste CATCH - of AND_CATCH-codeblok beëindigd. |
| END_CATCH_ALL | Hiermee wordt het laatste codeblok CATCH_ALL beëindigd. |
| WERPEN | Genereert een opgegeven uitzondering. |
| THROW_LAST | Hiermee wordt de momenteel afgehandelde uitzondering naar de volgende buitenste handler gegenereerd. |
Exception-Throwing Functions
| Naam | Description |
|---|---|
| AfxThrowArchiveException | Genereert een archief-uitzondering. |
| AfxThrowFileException | Genereert een bestandsonderzondering. |
| AfxThrowInvalidArgException | Genereert een ongeldige argument-uitzondering. |
| AfxThrowMemoryException | Genereert een geheugen-uitzondering. |
| AfxThrowNotSupportedException | Genereert een niet-ondersteunde uitzondering. |
| AfxThrowResourceException | Genereert een Windows-resource-uitzondering die niet is gevonden. |
| AfxThrowUserException | Genereert een uitzondering in een door de gebruiker geïnitieerde programmaactie. |
MFC biedt twee uitzonderingsfuncties die specifiek zijn bedoeld voor OLE-uitzonderingen:
OLE-uitzonderingsfuncties
| Naam | Description |
|---|---|
| AfxThrowOleDispatchException | Genereert een uitzondering binnen een OLE-automatiseringsfunctie. |
| AfxThrowOleException | Genereert een OLE-uitzondering. |
Ter ondersteuning van database-uitzonderingen bieden de databaseklassen twee uitzonderingsklassen en CDaoExceptionglobale functies ter ondersteuning van de uitzonderingstypenCDBException:
DAO-uitzonderingsfuncties
| Naam | Description |
|---|---|
| AfxThrowDAOException | Genereert een CDaoException uit uw eigen code. |
| AfxThrowDBException | Genereert een CDBException uit uw eigen code. |
MFC biedt de volgende beëindigingsfunctie:
Beëindigingsfuncties
| Naam | Description |
|---|---|
| AfxAbort | Wordt aangeroepen om een toepassing te beëindigen wanneer er een fatale fout optreedt. |
TRY
Hiermee stelt u een TRY-blok in.
TRY
Opmerkingen
Een TRY-blok identificeert een codeblok dat uitzonderingen kan genereren. Deze uitzonderingen worden verwerkt in de volgende CATCH - en AND_CATCH-blokken . Recursie is toegestaan: uitzonderingen kunnen worden doorgegeven aan een buitenste TRY-blok door ze te negeren of door de THROW_LAST macro te gebruiken. Beëindig het TRY-blok met een END_CATCH of END_CATCH_ALL macro.
Zie het artikel Uitzonderingen voor meer informatie.
Example
Zie het voorbeeld voor CATCH.
Requirements
Koptekst: afx.h
VANGEN
Definieert een codeblok waarmee het eerste uitzonderingstype wordt onderschept dat is opgetreden in het voorgaande TRY-blok .
CATCH(exception_class, exception_object_pointer_name)
Parameterwaarden
exception_class
Hiermee geeft u het uitzonderingstype op waarvoor moet worden getest. Zie klasse CException voor een lijst met standaarduitzonderingsklassen.
exception_object_pointer_name
Hiermee geeft u een naam op voor een uitzonderingsobjectaanwijzer die door de macro wordt gemaakt. U kunt de aanwijzernaam gebruiken om toegang te krijgen tot het uitzonderingsobject in het CATCH-blok . Deze variabele wordt voor u gedeclareerd.
Opmerkingen
De uitzonderingsverwerkingscode kan het uitzonderingsobject, indien van toepassing, ondervragen voor meer informatie over de specifieke oorzaak van de uitzondering. Roep de THROW_LAST macro aan om de verwerking te verplaatsen naar het volgende buitenste uitzonderingskader. Beëindig het TRY-blok met een END_CATCH macro.
Als exception_class de klasse CExceptionis, worden alle uitzonderingstypen gevangen. U kunt de functie CObject::IsKindOf-lid gebruiken om te bepalen welke specifieke uitzondering is opgetreden. Een betere manier om verschillende soorten uitzonderingen te ondervangen, is door sequentiële AND_CATCH instructies te gebruiken, elk met een ander uitzonderingstype.
De aanwijzer voor uitzonderingsobjecten wordt gemaakt door de macro. U hoeft het zelf niet te declareren.
Opmerking
Het CATCH-blok wordt gedefinieerd als een C++-bereik dat wordt afgelijnd door accolades. Als u variabelen in dit bereik declareert, zijn ze alleen toegankelijk binnen dat bereik. Dit geldt ook voor exception_object_pointer_name.
Zie het artikel Uitzonderingen voor meer informatie over uitzonderingen en de CATCH-macro.
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.
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;
}
CATCH_ALL
Hiermee definieert u een codeblok waarmee alle uitzonderingstypen worden onderschept die in het voorgaande TRY-blok zijn opgetreden.
CATCH_ALL(exception_object_pointer_name)
Parameterwaarden
exception_object_pointer_name
Hiermee geeft u een naam op voor een uitzonderingsobjectaanwijzer die door de macro wordt gemaakt. U kunt de naam van de aanwijzer gebruiken om toegang te krijgen tot het uitzonderingsobject in het CATCH_ALL blok. Deze variabele wordt voor u gedeclareerd.
Opmerkingen
De uitzonderingsverwerkingscode kan het uitzonderingsobject, indien van toepassing, ondervragen voor meer informatie over de specifieke oorzaak van de uitzondering. Roep de THROW_LAST macro aan om de verwerking te verplaatsen naar het volgende buitenste uitzonderingskader. Als u CATCH_ALL gebruikt, beëindigt u het TRY-blok met een END_CATCH_ALL macro.
Opmerking
Het CATCH_ALL blok wordt gedefinieerd als een C++-bereik dat is afgelijnd door accolades. Als u variabelen in dit bereik declareert, zijn ze alleen toegankelijk binnen dat bereik.
Zie het artikel Uitzonderingen voor meer informatie over uitzonderingen.
Example
Zie het voorbeeld voor CFile::Abort.
Requirements
Header afx.h
AND_CATCH
Definieert een codeblok voor het vangen van extra uitzonderingstypen die zijn gegenereerd in een voorgaande TRY-blok .
AND_CATCH(exception_class, exception_object_pointer_name)
Parameterwaarden
exception_class
Hiermee geeft u het uitzonderingstype op waarvoor moet worden getest. Zie klasse CException voor een lijst met standaarduitzonderingsklassen.
exception_object_pointer_name
Een naam voor een uitzonderingsobjectaanwijzer die door de macro wordt gemaakt. U kunt de naam van de aanwijzer gebruiken om toegang te krijgen tot het uitzonderingsobject in het AND_CATCH blok. Deze variabele wordt voor u gedeclareerd.
Opmerkingen
Gebruik de CATCH-macro om één uitzonderingstype te vangen en vervolgens de AND_CATCH macro om elk volgend type te vangen. Beëindig het TRY-blok met een END_CATCH macro.
De uitzonderingsverwerkingscode kan het uitzonderingsobject, indien van toepassing, ondervragen voor meer informatie over de specifieke oorzaak van de uitzondering. Roep de THROW_LAST macro in het AND_CATCH blok aan om de verwerking naar het volgende buitenste uitzonderingskader te verplaatsen. AND_CATCH het einde van het voorgaande CATCH - of AND_CATCH-blok markeert.
Opmerking
Het AND_CATCH blok wordt gedefinieerd als een C++-bereik (afgelijnd door accolades). Als u variabelen in dit bereik declareert, moet u er rekening mee houden dat ze alleen toegankelijk zijn binnen dat bereik. Dit geldt ook voor de variabele exception_object_pointer_name .
Example
Zie het voorbeeld voor CATCH.
Requirements
Header afx.h
AND_CATCH_ALL
Definieert een codeblok voor het vangen van extra uitzonderingstypen die zijn gegenereerd in een voorgaande TRY-blok .
AND_CATCH_ALL(exception_object_pointer_name)
Parameterwaarden
exception_object_pointer_name
Een naam voor een uitzonderingsobjectaanwijzer die door de macro wordt gemaakt. U kunt de naam van de aanwijzer gebruiken om toegang te krijgen tot het uitzonderingsobject in het AND_CATCH_ALL blok. Deze variabele wordt voor u gedeclareerd.
Opmerkingen
Gebruik de CATCH-macro om één uitzonderingstype te vangen en vervolgens de AND_CATCH_ALL macro om alle andere volgende typen te vangen. Als u AND_CATCH_ALL gebruikt, beëindigt u het TRY-blok met een END_CATCH_ALL macro.
De uitzonderingsverwerkingscode kan het uitzonderingsobject, indien van toepassing, ondervragen voor meer informatie over de specifieke oorzaak van de uitzondering. Roep de THROW_LAST macro in het AND_CATCH_ALL blok aan om de verwerking te verplaatsen naar het volgende buitenste uitzonderingskader. AND_CATCH_ALL het einde van het voorgaande CATCH - of AND_CATCH_ALL-blok markeert.
Opmerking
Het AND_CATCH_ALL blok wordt gedefinieerd als een C++-bereik (afgelijnd door accolades). Als u variabelen in dit bereik declareert, moet u er rekening mee houden dat ze alleen toegankelijk zijn binnen dat bereik.
Requirements
Header afx.h
END_CATCH
Hiermee wordt het einde van het laatste CATCH - of AND_CATCH-blok gemarkeerd.
END_CATCH
Opmerkingen
Zie het artikel Uitzonderingen voor meer informatie over de macro END_CATCH.
Requirements
Header afx.h
END_CATCH_ALL
Hiermee wordt het einde van het laatste CATCH_ALL88 of AND_CATCH_ALL blok gemarkeerd.
END_CATCH_ALL
Requirements
Header afx.h
THROW (MFC)
Hiermee wordt de opgegeven uitzondering gegenereerd.
THROW(exception_object_pointer)
Parameterwaarden
exception_object_pointer
Verwijst naar een uitzonderingsobject dat is afgeleid van CException.
Opmerkingen
THROW onderbreekt de uitvoering van het programma, waarbij het besturingselement wordt doorgegeven aan het bijbehorende CATCH-blok in uw programma. Als u het CATCH-blok niet hebt opgegeven, wordt het besturingselement doorgegeven aan een Microsoft Foundation Class Library-module waarmee een foutbericht wordt afgedrukt en wordt afgesloten.
Zie het artikel Uitzonderingen voor meer informatie.
Requirements
Header afx.h
THROW_LAST
Hiermee wordt de uitzondering teruggezet naar het volgende buitenste CATCH-blok .
THROW_LAST()
Opmerkingen
Met deze macro kunt u een lokaal gemaakte uitzondering genereren. Als u een uitzondering probeert te genereren die u zojuist hebt opgevangen, wordt deze normaal gesproken buiten het bereik en verwijderd. Met THROW_LAST wordt de uitzondering correct doorgegeven aan de volgende CATCH-handler .
Zie het artikel Uitzonderingen voor meer informatie.
Example
Zie het voorbeeld voor CFile::Abort.
Requirements
Header afx.h
AfxThrowArchiveException
Genereert een archief-uitzondering.
void AfxThrowArchiveException(int cause, LPCTSTR lpszArchiveName);
Parameterwaarden
Oorzaak
Hiermee geeft u een geheel getal op dat de reden voor de uitzondering aangeeft. Zie CArchiveException::m_cause voor een lijst met mogelijke waarden.
lpszArchiveName
Verwijst naar een tekenreeks met de naam van het CArchive object dat de uitzondering heeft veroorzaakt (indien beschikbaar).
Requirements
Header afx.h
AfxThrowFileException
Genereert een bestandsonderzondering.
void AfxThrowFileException(
int cause,
LONG lOsError = -1,
LPCTSTR lpszFileName = NULL);
Parameterwaarden
Oorzaak
Hiermee geeft u een geheel getal op dat de reden voor de uitzondering aangeeft. Zie CFileException::m_cause voor een lijst met mogelijke waarden.
lOsError
Bevat het foutnummer van het besturingssysteem (indien beschikbaar) waarin de reden voor de uitzondering wordt aangegeven. Zie de handleiding van uw besturingssysteem voor een lijst met foutcodes.
lpszFileName
Verwijst naar een tekenreeks met de naam van het bestand dat de uitzondering heeft veroorzaakt (indien beschikbaar).
Opmerkingen
U bent verantwoordelijk voor het bepalen van de oorzaak op basis van de foutcode van het besturingssysteem.
Requirements
Header afx.h
AfxThrowInvalidArgException
Genereert een ongeldige argument-uitzondering.
Syntaxis
void AfxThrowInvalidArgException( );
Opmerkingen
Deze functie wordt aangeroepen wanneer ongeldige argumenten worden gebruikt.
Requirements
koptekst: afx.h
AfxThrowMemoryException
Genereert een geheugen-uitzondering.
void AfxThrowMemoryException();
Opmerkingen
Roep deze functie aan als aanroepen naar onderliggende systeemgeheugentoewijzingen (zoals malloc en de functie GlobalAlloc Windows) mislukken. U hoeft deze new niet aan te roepen omdat new er automatisch een geheugentoezondering wordt gegenereerd als de geheugentoewijzing mislukt.
Requirements
Header afx.h
AfxThrowNotSupportedException
Genereert een uitzondering die het resultaat is van een aanvraag voor een niet-ondersteunde functie.
void AfxThrowNotSupportedException();
Requirements
Header afx.h
AfxThrowResourceException
Genereert een resource-uitzondering.
void AfxThrowResourceException();
Opmerkingen
Deze functie wordt normaal gesproken aangeroepen wanneer een Windows-resource niet kan worden geladen.
Requirements
Header afx.h
AfxThrowUserException
Hiermee genereert u een uitzondering om een bewerking door eindgebruikers te stoppen.
void AfxThrowUserException();
Opmerkingen
Deze functie wordt normaal gesproken onmiddellijk aangeroepen nadat AfxMessageBox een fout aan de gebruiker is gemeld.
Requirements
Header afx.h
AfxThrowOleDispatchException
Gebruik deze functie om een uitzondering te genereren binnen een OLE-automatiseringsfunctie.
void AFXAPI AfxThrowOleDispatchException(
WORD wCode ,
LPCSTR lpszDescription,
UINT nHelpID = 0);
void AFXAPI AfxThrowOleDispatchException(
WORD wCode,
UINT nDescriptionID,
UINT nHelpID = -1);
Parameterwaarden
wCode
Een foutcode die specifiek is voor uw toepassing.
lpszDescription
Mondelinge beschrijving van de fout.
nDescriptionID
Resource-id voor de beschrijving van de mondelinge fout.
nHelpID
Een Help-context voor de Help van uw toepassing (. HLP)-bestand.
Opmerkingen
De informatie die aan deze functie wordt verstrekt, kan worden weergegeven door de rijtoepassing (Microsoft Visual Basic of een andere OLE Automation-clienttoepassing).
Example
// Sort is method of automation class CStrArrayDoc
long CStrArrayDoc::Sort(VARIANT* vArray)
{
USES_CONVERSION;
// Type check VARIANT parameter. It should contain a BSTR array
// passed by reference. The array must be passed by reference; it is
// an in-out-parameter.
// throwing COleDispatchException allows the EXCEPINFO structure of
// IDispatch::Invoke() to set
if (V_VT(vArray) != (VT_ARRAY | VT_BSTR))
AfxThrowOleDispatchException(1001,
_T("Type Mismatch in Parameter. Pass a string array by reference"));
// ...
// ...
return 0;
}
Requirements
Header afx.h
AfxThrowOleException
Hiermee maakt u een object van het type COleException en genereert u een uitzondering.
void AFXAPI AfxThrowOleException(SCODE sc);
void AFXAPI AfxThrowOleException(HRESULT hr);
Parameterwaarden
Sc
Een OLE-statuscode die de reden voor de uitzondering aangeeft.
hr-
Verwerken naar een resultaatcode die de reden voor de uitzondering aangeeft.
Opmerkingen
De versie die een HRESULT als argument gebruikt, converteert die resultaatcode naar de bijbehorende SCODE. Zie Structuur van COM-foutcodes in de Windows SDK voor meer informatie over HRESULT en SCODE.
Requirements
Header afxdao.h
AfxThrowDaoException
Roep deze functie aan om een uitzondering van het type CDaoException uit uw eigen code te genereren.
void AFXAPI AfxThrowDaoException(
int nAfxDaoError = NO_AFX_DAO_ERROR,
SCODE scode = S_OK);
Parameterwaarden
nAfxDaoError
Een geheel getal dat een uitgebreide DAO-foutcode vertegenwoordigt. Dit kan een van de waarden zijn die worden vermeld onder CDaoException::m_nAfxDaoError.
scode
Een OLE-foutcode van DAO, van het type SCODE. Zie CDaoException::m_scode voor meer informatie.
Opmerkingen
Het framework roept AfxThrowDaoExceptionook aan. In uw gesprek kunt u een van de parameters of beide doorgeven. Als u bijvoorbeeld een van de fouten wilt genereren die zijn gedefinieerd in CDaoException::nAfxDaoError , maar u niet om de codeparameter geeft, geeft u een geldige code door in de parameter nAfxDaoError en accepteert u de standaardwaarde voor scode.
Zie de klasse CDaoException in dit boek en het artikel Uitzonderingen: Database-uitzonderingen voor informatie over uitzonderingen met betrekking tot de MFC DAO-klassen.
Requirements
Header afxdb.h
AfxThrowDBException
Roep deze functie aan om een uitzondering van het type CDBException uit uw eigen code te genereren.
void AfxThrowDBException(
RETCODE nRetCode,
CDatabase* pdb,
HSTMT hstmt);
Parameterwaarden
nRetCode
Een waarde van het type RETCODE, waarmee het type fout wordt gedefinieerd waardoor de uitzondering werd gegenereerd.
Vob
Een aanwijzer naar het CDatabase object dat de gegevensbronverbinding vertegenwoordigt waaraan de uitzondering is gekoppeld.
hstmt
Een ODBC HSTMT-ingang waarmee de instructiehandgreep wordt opgegeven waaraan de uitzondering is gekoppeld.
Opmerkingen
Het framework roept AfxThrowDBException aan wanneer een ODBC RETCODE wordt ontvangen van een aanroep naar een ODBC-API-functie en interpreteert de RETCODE als een uitzonderlijke voorwaarde in plaats van een verwachte fout. Een gegevenstoegangsbewerking kan bijvoorbeeld mislukken vanwege een schijfleesfout.
Zie hoofdstuk 8, 'Status- en foutinformatie ophalen' in de Windows SDK voor meer informatie over de RETCODE-waarden die zijn gedefinieerd door ODBC. Zie klasse CDBException voor informatie over MFC-extensies voor deze codes.
Requirements
Header afx.h
AfxAbort
De standaardbeëindigingsfunctie die door MFC wordt geleverd.
void AfxAbort();
Opmerkingen
AfxAbort wordt intern aangeroepen door MFC-lidfuncties wanneer er een fatale fout is, zoals een onopgestoken uitzondering die niet kan worden afgehandeld. U kunt in zeldzame gevallen aanroepen AfxAbort wanneer u een catastrofale fout tegenkomt waaruit u niet kunt herstellen.
Example
Zie het voorbeeld voor CATCH.
Requirements
Header afx.h
Zie ook
macro's en globalen
CException-klasse
Klasse CInvalidArgException