2011-11-04 82 views

回答

2

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

+0

据我已经使用读捕获/ EHA涉及安全问题,这不是好的做法。并且可能会导致性能较差的图像,因为即使编译器没有看到投掷,编译器也不会主动优化try块。 – cprogrammer

+0

安全问题?不要这样想。没有什么好的表现,是的。你大量增加了可能导致C++异常抛出的指令数量。 – MSalters

+0

你知道它效率低吗?也许我应该使用SEH并自己转换异常。 – cprogrammer

2

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

  • 崩溃代码

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

在DLL中没有任何异常在一个try/catch处理所有

  • 调用代码的其他地方编译

然后

  • 除非调用代码与/ EHA编译的程序会崩溃
  • 没有_set_se_translator例外只能在catch(...)
+0

感谢您的调查! OP可能处于相同的情况:将Boost.Test与已编译的库一起使用,并且我可以仅为测试文件对象启用/ EHa –