используя _set_se_translator и флаги компиляции - PullRequest
1 голос
/ 04 ноября 2011

Документация гласит: "Вы должны использовать / EHa при использовании _set_se_translator.".
Мой вопрос: следует ли / EHa использовать для всех файлов в проекте / всех файлов в проекте, которые перехватывают исключения илипросто в файле, который вызывает _set_se_translator?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

После проверки я должен не согласиться с тем, что было сказано ранее обо всех экземплярах, которые необходимо скомпилировать с / EHa. Я сделал небольшую программу с:

  • код сбоя

      __declspec(dllexport) void crashMe()  {    *((int*)0)=0;  } 
    

в DLL, скомпилированной без какой-либо обработки исключений

  • код вызова в другом месте в try / catch

Тогда

  • Если вызывающий код не скомпилирован с / EHa, программа завершится сбоем
  • Без _set_se_translator исключение можно поймать только в catch(...)
2 голосов
/ 04 ноября 2011

Вам это нужно не только для функций, перехватывающих исключения, но и для функций, которые их генерируют и распространяют. Фактически сам вызов _set_se_translator, вероятно, не нужно компилировать с / Eha, но зачем быть непоследовательным?

...