Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se explican los mecanismos de control de excepciones disponibles en MFC. Hay dos mecanismos disponibles:
Excepciones de C++, disponibles en MFC versión 3.0 y posteriores
Las macros de excepción de MFC, disponibles en las versiones 1.0 y posteriores de MFC
Si va a escribir una nueva aplicación mediante MFC, debe usar el mecanismo de C++. Puede usar el mecanismo basado en macros si la aplicación existente ya usa ese mecanismo ampliamente.
Puede convertir fácilmente el código existente para usar excepciones de C++ en lugar de las macros de excepción de MFC. Las ventajas de convertir el código y las instrucciones para hacerlo se describen en el artículo Excepciones: Conversión de macros de excepción de MFC.
Si ya ha desarrollado una aplicación con las macros de excepción de MFC, puede seguir usando estas macros en el código existente, mientras usa excepciones de C++ en el nuevo código. En el artículo Excepciones: Cambios en las macros de excepción de la versión 3.0 se proporcionan directrices para hacerlo.
Nota:
Para habilitar el control de excepciones de C++ en el código, seleccione Habilitar excepciones de C++ en la página Generación de código de la carpeta C/C++ del cuadro de diálogo Páginas de propiedades del proyecto o use la opción del compilador /EHsc .
En este artículo se tratan los temas siguientes:
Cuándo usar excepciones
Se pueden producir tres categorías de resultados cuando se llama a una función durante la ejecución del programa: ejecución normal, ejecución errónea o ejecución anómala. Cada categoría se describe a continuación.
Ejecución normal
La función puede ejecutarse normalmente y devolver. Algunas funciones devuelven un código de resultado al autor de la llamada, que indica el resultado de la función. Los códigos de resultado posibles se definen estrictamente para la función y representan el intervalo de posibles resultados de la función. El código de resultado puede indicar éxito o error, o incluso puede indicar un tipo determinado de error que se encuentra dentro del intervalo normal de expectativas. Por ejemplo, una función file-status puede devolver un código que indica que el archivo no existe. Tenga en cuenta que el término "código de error" no se usa porque un código de resultado representa uno de los muchos resultados esperados.
Ejecución errónea
El autor de la llamada comete algún error al pasar argumentos a la función o llama a la función en un contexto inadecuado. Esta situación provoca un error y se debe detectar mediante una aserción durante el desarrollo del programa. (Para obtener más información sobre las aserciones, vea Aserciones de C/C++).
Ejecución anómala
La ejecución anómala incluye situaciones en las que las condiciones fuera del control del programa, como errores de E/S o de memoria baja, influyen en el resultado de la función. Las situaciones anómalas deben controlarse detectando y iniciando excepciones.
El uso de excepciones es especialmente adecuado para la ejecución anómala.
Compatibilidad con excepciones de MFC
Tanto si usa las excepciones de C++ directamente como si usa las macros de excepciones de MFC, usará la clase CException o CException
los objetos derivados que puede producir el marco o la aplicación.
En la tabla siguiente se muestran las excepciones predefinidas proporcionadas por MFC.
Exception (clase) | Significado |
---|---|
CMemoryException (clase) | Memoria insuficiente |
CFileException (clase) | Excepción de archivo |
CArchiveException (clase) | Excepción de archivo/serialización |
CNotSupportedException (clase) | Respuesta a la solicitud de servicio no admitido |
CResourceException (clase) | Excepción de asignación de recursos de Windows |
CDaoException (clase) | Excepciones de base de datos (clases DAO) |
CDBException (clase) | Excepciones de base de datos (clases ODBC) |
COleException (clase) | Excepciones OLE |
COleDispatchException (clase) | Excepciones de distribución (automatización) |
CUserException (clase) | Excepción que alerta al usuario con un cuadro de mensaje y, a continuación, produce una clase CException genérica. |
Desde la versión 3.0, MFC ha usado excepciones de C++, pero sigue admitiendo sus macros de control de excepciones anteriores, que son similares a las excepciones de C++ en forma. Aunque estas macros no se recomiendan para la nueva programación, siguen siendo compatibles con versiones anteriores. En los programas que ya usan las macros, también puede usar excepciones de C++. Durante el preprocesamiento, las macros se evalúan como las palabras clave de control de excepciones definidas en la implementación de MSVC del lenguaje C++ a partir de la versión 2.0 de Visual C++. Puede dejar las macros de excepción existentes en su lugar mientras empieza a usar excepciones de C++. Para obtener información sobre la combinación de macros y el control de excepciones de C++ y la conversión de código antiguo para usar el nuevo mecanismo, vea los artículos Excepciones: Uso de macros de MFC y excepciones y excepciones de C++ : Conversión de macros de excepciones de MFC. Las macros de excepción de MFC anteriores, si todavía las usa, evalúen las palabras clave de excepción de C++. Vea Excepciones: Cambios en las macros de excepción en la versión 3.0. MFC no admite directamente controladores de excepciones estructurados de Windows NT (SEH), como se describe en Control de excepciones estructurados.
Más información sobre excepciones
En los artículos siguientes se explica el uso de la biblioteca MFC para la entrega de excepciones:
En los artículos siguientes se comparan las macros de excepción de MFC con las palabras clave de excepción de C++ y se explica cómo puede adaptar el código:
Consulte también
Procedimientos recomendados de C++ moderno para las excepciones y el control de errores