使用_set_se_translator和编译标志

using _set_se_translator and compilation flags

本文关键字:编译 标志 se set 使用 translator      更新时间:2023-10-16

文档说明"在使用_set_se_translator时必须使用/EHa ".
我的问题是:/EHa应该用于项目中的所有文件/捕获异常的项目中的所有文件,或者只是在调用_set_se_translator的文件中?

不仅需要捕获异常的函数,还需要抛出和传播异常的函数。对_set_se_translator本身的实际调用可能不需要用/Eha编译,但为什么不一致?

检查后,我必须不同意之前所说的所有实例都需要用/EHa编译。我编写了一个小程序:

  • 崩溃代码

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

在没有任何异常处理的情况下编译的DLL中的

  • 调用try/catch中其他地方的代码
然后

  • 除非使用/EHa编译调用代码,否则程序将崩溃
  • 没有_set_se_translator,异常只能在catch(...)中捕获