Mistura de C (estruturado) e exceções do C++
Se você quiser escrever código mais portável, não é recomendável usar um programa C++ de manipulação de exceção estruturada.No entanto, às vezes, convém compilar com /EHa e misture estruturada de exceções e o código-fonte C++ e precisa de algum recurso para lidar com os dois tipos de exceções.Como um manipulador de exceção estruturada não tem nenhum conceito de objetos ou exceções digitadas, ele não pode manipular exceções lançadas por código C++; No entanto, C++ catch manipuladores podem lidar com exceções estruturadas.Como tal, sintaxe de manipulação de exceção do C++ (tente, throw, catch) não é aceita pelo compilador C, mas a sintaxe de manipulação de exceção estruturada (__try, __except, __finally) é suportado pelo compilador C++.
Consulte set_se_translator para obter informações sobre o tratamento de exceções estruturadas como exceções de C++.
Se você combinar estruturado e exceções do C++, observe o seguinte:
Exceções de C++ e estruturada de exceções não pode ser combinada na mesma função.
Manipuladores de terminação (__finally blocos) são sempre executadas, mesmo durante o desenrolar após uma exceção é lançada.
Manipulação de exceção de C++ pode capturar e preserve desenrolar semântica em todos os módulos compilados com o /EH opção de compilador (esta opção habilita desenrolar semântica).
Pode haver algumas situações nas qual destruidor funções não são chamadas para todos os objetos.Por exemplo, se uma exceção estruturada ocorre ao tentar fazer com que uma função chamada através de um ponteiro de função não inicializado e essa função usa como objetos de parâmetros que foram construídos antes da chamada, esses objetos não terá seus destruidores chamados durante o desenrolamento de pilha.