Clase CException
La clase base para todas las excepciones en la biblioteca MFC (Microsoft Foundation Class).
Sintaxis
class AFX_NOVTABLE CException : public CObject
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CException::CException |
Construye un objeto CException . |
Métodos públicos
Nombre | Descripción |
---|---|
CException::Delete |
Elimina un objeto CException . |
CException::ReportError |
Notifica un mensaje de error en un cuadro de mensaje al usuario. |
Comentarios
Dado que CException
es una clase base abstracta no se pueden crear CException
objetos directamente; debe crear objetos de clases derivadas. Si necesita crear su propia clase de estilo CException
, use una de las clases derivadas mostradas anteriormente como modelo. Asegúrese de que la clase derivada también usa IMPLEMENT_DYNAMIC
.
A continuación se enumeran las clases derivadas y sus descripciones:
Nombre | Descripción |
---|---|
CSimpleException |
Una clase base para excepciones MFC de recursos críticos. |
CInvalidArgException |
Condición de excepción de argumento no válida. |
CMemoryException |
Excepción de memoria insuficiente. |
CNotSupportedException |
Solicitud de una operación no admitida. |
CArchiveException |
Excepción específica del archivo. |
CFileException |
Excepción específica del archivo. |
CResourceException |
Recurso de Windows no encontrado o que no se puede crear. |
COleException |
Excepción OLE. |
CDBException |
Excepción de base de datos (es decir, condiciones de excepción que surgen para las clases de base de datos MFC basadas en la conectividad abierta de bases de datos). |
COleDispatchException |
Excepción de envío OLE (automatización). |
CUserException |
Excepción que indica que no se ha podido encontrar un recurso. |
CDaoException |
Excepción de objeto de acceso a datos (es decir, condiciones de excepción que surgen para las clases DAO). |
CInternetException |
Excepción de Internet (es decir, condiciones de excepción que surgen para las clases de Internet). |
Estas excepciones están diseñadas para usarse con las macros THROW
, THROW_LAST
, try
, catch
, and_catch
y end_catch
. Para obtener más información sobre las excepciones, vea Procesamiento de excepciones o el artículo Control de excepciones (MFC).
Para detectar una excepción específica, use la clase derivada adecuada. Para detectar todos los tipos de excepciones, use CException
y después CObject::IsKindOf
para diferenciar entre las clases derivadas de CException
. Tenga en cuenta que CObject::IsKindOf
solo funciona para las clases declaradas con la macro IMPLEMENT_DYNAMIC
, con el fin de aprovechar las ventajas de la comprobación dinámica de tipos. Cualquier clase derivada de CException
que cree también debe usar la macro IMPLEMENT_DYNAMIC
.
Puede notificar detalles sobre las excepciones al usuario llamando a GetErrorMessage
o ReportError
, dos funciones miembro que funcionan con cualquiera de las clases derivadas de CException
.
Si una de las macros detecta una excepción, el objeto CException
se elimina automáticamente; no lo elimine por su cuenta. Si se detecta una excepción mediante una palabra clave catch
, no se elimina automáticamente. Vea el artículo Control de excepciones (MFC) para obtener más información sobre cuándo eliminar un objeto de excepción.
Jerarquía de herencia
CException
Requisitos
Encabezado: afx.h
CException::CException
Esta función miembro construye un objeto CException
.
explicit CException(BOOL bAutoDelete);
Parámetros
b_AutoDelete
Especifique TRUE
si la memoria del objeto CException
se ha asignado en el montón. Esto hará que el objeto CException
se elimine cuando se llame a la función miembro Delete
para eliminar la excepción. Especifique FALSE
si el objeto CException
está en la pila o es un objeto global. En este caso, el objeto CException
no se eliminará cuando se llame a la función miembro Delete
.
Comentarios
Normalmente, nunca tendría que llamar directamente a este constructor. Una función que produce una excepción debe crear una instancia de una clase derivada de CException
y llamar a su constructor, o bien usar una de las funciones throw de MFC, como AfxThrowFileException
, para iniciar un tipo predefinido. Esta documentación se proporciona solo para completar la información.
CException::Delete
Esta función comprueba si el objeto CException
se creó en el montón y, si es así, llama al operador delete
en el objeto.
void Delete();
Comentarios
Al eliminar un objeto CException
, use la función miembro Delete
para eliminar la excepción. No use el operador delete
directamente, ya que el objeto CException
puede ser un objeto global o se puede haber creado en la pila.
Puede especificar si el objeto se debe eliminar cuando se construye. Para obtener más información, vea CException::CException
.
Solo tiene que llamar a Delete
si usa el mecanismo de try
- catch
de C++. Si usa las macros TRY
y CATCH
de MFC, estas llamarán automáticamente a esta función.
Ejemplo
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
Llame a esta función miembro para notificar texto de error en un cuadro de mensaje al usuario.
virtual int ReportError(
UINT nType = MB_OK,
UINT nMessageID = 0);
Parámetros
nType
Especifica el estilo del cuadro de mensaje. Aplique cualquier combinación de estilos de cuadro de mensaje al cuadro. Si no se especifica este parámetro, el valor predeterminado es MB_OK
.
nMessageID
Especifica el id. de recurso (entrada de tabla de cadena) de un mensaje que se va a mostrar si el objeto de excepción no tiene un mensaje de error. Si es 0, se muestra el mensaje "No hay ningún mensaje de error disponible".
Valor devuelto
Es un valor AfxMessageBox
; de lo contrario, es 0 si no hay suficiente memoria para mostrar el cuadro de mensaje. Vea AfxMessageBox
para obtener los valores de devolución posibles.
Ejemplo
Este es un ejemplo del uso de CException::ReportError
. Para obtener otro ejemplo, vea el que hay disponible de 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();
}
Consulte también
CObject
(clase)
Gráfico de jerarquías
Procesamiento de excepciones