Exceções: Lançar exceções de suas próprias funções

É possível usar o paradigma de manipulação de exceção do MFC unicamente para capturar exceções lançadas por funções no MFC ou em outras bibliotecas.Juntamente com a captura de exceções lançadas por código da biblioteca, você pode lançar exceções de seu próprio código, se você estiver escrevendo funções que podem encontrar condições excepcionais.

Quando uma exceção é lançada, a execução da função corrente é interrompida e vai diretamente para o catch bloco da quadro de exceção mais internos.O mecanismo de exceção ignora o caminho de sair normal de uma função.Portanto, você deve ser exclua esses blocos de memória devem ser excluídos em uma sair normal.

Lançar uma exceção

  1. Use uma das funções de auxiliar MFC, tais sistema autônomo AfxThrowMemoryException. Essas funções lançam um objeto de exceção pré-distribuídos do tipo apropriado.

    No exemplo a seguir, uma função tenta alocar dois blocos de memória e lança uma exceção se qualquer alocação falhar:

    {
        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 );
    }
    

    Se a primeira alocação falhar, você pode simplesmente lançar a exceção de memória.Se a primeira alocação for bem-sucedida, mas o outro falha, você deverá disponível o primeiro bloco de alocação antes de lançar a exceção.Se ambas as alocações tiver êxito, pode continuar normalmente e liberar os blocos ao sair da função.

    - ou -

  2. Use uma exceção definida pelo usuário para indicar uma condição com problema.Você pode exibir um item de qualquer tipo, até mesmo uma classe inteira sistema autônomo a exceção.

    O exemplo a seguir tenta executar um som por meio de um dispositivo de som wave e lança uma exceção se houver uma falha.

    #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;
    }
    
Observação:

Do MFC manipulação de padrão de exceções se aplicam apenas às ponteiros para CException objetos de (e CException-classes derivadas). O exemplo acima ignora mecanismo de exceção do MFC.

Consulte também

Conceitos

Exceção Handling in MFC