Compartir a través de


Control de excepciones en MFC

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 CExceptionlos 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