Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo explica os mecanismos de tratamento de exceções disponíveis no MFC. Dois mecanismos estão disponíveis:
Exceções do C++, disponíveis no MFC versão 3.0 e posterior
As macros de exceção do MFC, disponíveis nas versões 1.0 e posteriores do MFC
Se você estiver escrevendo um novo aplicativo usando o MFC, deverá usar o mecanismo C++. Você pode usar o mecanismo baseado em macros se o aplicativo existente já fizer amplo uso desse mecanismo.
Você pode converter prontamente o código existente para usar exceções C++ em vez das macros de exceção MFC. As vantagens de converter seu código e as diretrizes para fazer isso estão descritas no artigo Exceções: convertendo de Macros de Exceção do MFC.
Se você já tiver desenvolvido um aplicativo usando as macros de exceção do MFC, poderá continuar usando essas macros em seu código existente, usando exceções C++ em seu novo código. O artigo Exceções: alterações nas macros de exceção na versão 3.0 fornece diretrizes para fazer isso.
Observação
Para habilitar o tratamento de exceções do C++ em seu código, selecione Habilitar Exceções C++ na página Geração de Código na pasta C/C++ da caixa de diálogo Páginas de Propriedades do projeto ou use a opção do compilador /EHsc .
Este artigo aborda os seguintes tópicos:
Quando usar exceções
Três categorias de resultados podem ocorrer quando uma função é chamada durante a execução do programa: execução normal, execução errônea ou execução anormal. Cada categoria é descrita abaixo.
Execução normal
A função pode ser executada normalmente e retornar. Algumas funções retornam um código de resultado para o chamador, o que indica o resultado da função. Os códigos de resultado possíveis são estritamente definidos para a função e representam o intervalo de possíveis resultados da função. O código de resultado pode indicar êxito ou falha ou pode até mesmo indicar um tipo específico de falha que está dentro do intervalo normal de expectativas. Por exemplo, uma função de status de arquivo pode retornar um código que indica que o arquivo não existe. Observe que o termo "código de erro" não é usado porque um código de resultado representa um dos muitos resultados esperados.
Execução errônea
O chamador comete algum erro ao passar argumentos para a função ou chama a função em um contexto inadequado. Essa situação causa um erro e deve ser detectada por uma asserção durante o desenvolvimento do programa. Para obter mais informações sobre asserções, consulte Asserções C/C++.
Execução anormal
A execução anormal inclui situações em que condições fora do controle do programa, como memória baixa ou erros de E/S, estão influenciando o resultado da função. Situações anormais devem ser tratadas capturando e lançando exceções.
O uso de exceções é especialmente adequado em execuções anormais.
Suporte a exceções do MFC
Seja usando as exceções do C++ diretamente ou usando as macros de exceção do MFC, você usará a Classe CException ou objetos derivados de CException que podem ser gerados pela estrutura ou pelo seu aplicativo.
A tabela a seguir mostra as exceções predefinidas fornecidas pelo MFC.
| Classe de exceção | Significado |
|---|---|
| Classe CMemoryException | Memória insuficiente |
| Classe CFileException | Exceção de arquivo |
| Classe CArchiveException | Exceção de arquivamento/serialização |
| Classe CNotSupportedException | Resposta à solicitação de serviço sem suporte |
| Classe CResourceException | Exceção de alocação de recursos do Windows |
| Classe CDaoException | Exceções de banco de dados (classes DAO) |
| Classe CDBException | Exceções de banco de dados (classes ODBC) |
| Classe COleException | Exceções OLE |
| Classe COleDispatchException | Exceções de expedição (automação) |
| Classe CUserException | Exceção que alerta o usuário com uma caixa de mensagem e, em seguida, lança uma classe CException genérica |
Desde a versão 3.0, o MFC tem usado exceções C++, mas ainda dá suporte às macros de tratamento de exceção mais antigas, que são semelhantes às exceções do C++ na forma. Embora essas macros não sejam recomendadas para uma nova programação, elas ainda têm suporte para compatibilidade com versões anteriores. Em programas que já usam as macros, você também pode usar as exceções do C++ livremente. Durante o pré-processamento, as macros são avaliadas como as palavras-chave de tratamento de exceções definidas na implementação MSVC da linguagem C++ a partir da versão 2.0 do Visual C++. Você pode deixar as macros de exceção existentes onde estão enquanto começa a usar exceções C++. Para obter informações sobre como misturar macros e tratamento de exceções do C++ e sobre a conversão de código antigo para usar o novo mecanismo, consulte os artigos Exceções: Usando Macros MFC e Exceções C++ e Exceções: Convertendo de Macros de Exceção MFC. As macros de exceção MFC mais antigas, se você ainda as usar, serão avaliadas como palavras-chave de exceção C++. Confira exceções: alterações nas macros de exceção na versão 3.0. O MFC não dá suporte diretamente aos SEH (manipuladores de exceção estruturados) do Windows NT, conforme discutido no Tratamento de Exceções Estruturadas.
Leitura adicional sobre exceções
Os artigos a seguir explicam o uso da biblioteca MFC para entrega de exceções:
Os artigos a seguir comparam as macros de exceção MFC com as palavras-chave de exceção C++ e explicam como você pode adaptar seu código:
Consulte também
Práticas recomendadas do C++ modernas para tratamento de erros e exceções