Compartir a través de


Excepciones: Excepciones que produce de las funciones de Your Own

Es posible utilizar el paradigma de control de excepciones de MFC sólo para detectar las excepciones producidas por funciones en MFC u otras bibliotecas.Además de detectar excepciones producidas por código de biblioteca, puede producir excepciones desde su propio código si escribe las funciones que pueden encontrar condiciones excepcionales.

Cuando se produce una excepción, la ejecución de la función actual se detiene y salta directamente al bloque catch del marco más interno de la excepción.El mecanismo de excepción omite la ruta normal del resultado de una función.Por consiguiente, asegúrese de eliminar los bloques de memoria que se eliminarán en una salida normal.

Para producir una excepción

  1. El uso uno auxiliares de MFC funciona, por ejemplo AfxThrowMemoryException.Estas funciones producen un objeto de excepción reservado del tipo adecuado.

    En el ejemplo siguiente, una función intenta asignar dos bloques de memoria y produce una excepción si se produce un error en cualquier asignación:

    {
        char* p1 = (char*)malloc( SIZE_FIRST );
        if( p1 == NULL )
            AfxThrowMemoryException();
        char* p2 = (char*)malloc( SIZE_SECOND );
        if( p2 == NULL )
        {
            free( p1 );
            AfxThrowMemoryException();
        }
    
        // ... Do something with allocated blocks ...
    
        // In normal exit, both blocks are deleted.
        free( p1 );
        free( p2 );
    }
    

    Si la primera asignación, puede producir simplemente la excepción de memoria insuficiente.Si la primera asignación es correcta pero segunda falla, debe liberar la primera asignación bloqueada antes de iniciar la excepción.Si ambas asignaciones tienen éxito, puede continuar normalmente y liberar los bloques al salir de la función.

     O bien 

  2. Utilice una excepción definida por el usuario para indicar una condición del problema.Puede producir un elemento de cualquier tipo, incluso una clase completa, como la excepción.

    El ejemplo siguiente se intenta reproducir un sonido a través de un dispositivo de ondas y produce una excepción si se produce un error.

    #define WAVE_ERROR -5
    {
       // This Win32 API returns 0 if the sound cannot be played.
       // Throw an integer constant if it fails.
       if( !PlaySound(_T("SIREN.WAV"), NULL, SND_ASYNC) )
          throw WAVE_ERROR;
    }
    

[!NOTA]

El control predeterminado de MFC de excepciones sólo se aplica a los punteros a objetos de CException (y los objetos de CException- clases derivadas).El ejemplo anterior omite el mecanismo de excepción de MFC.

Vea también

Conceptos

Control de excepciones en MFC