现象描述:
    在VS2008中,使用了try…catch,但没有抛出异常而是直接报错。

    代码如下:

    1. FreeLibrary(hModule);
    2. try
    3. {
    4. cout<<g_getA(25, 15)<<endl;//g_getA是动态链接库hModule中的方法
    5. }catch(...)
    6. {
    7. cout<<"use dll error"<<endl;//应该打印输出
    8. }

    应该打印输出的地方直接报错中断。

    try…catch异常的原因总结如下:

    [1]. 编译器问题
    VC编译器会将try…catch模块给优化,导致其不能正常运行
    项目->属性->配置属性->c/c++->命令行->附加选项,添加 /EHa

    我的问题通过该方法就能解决

    [2].异常机制问题

    1. try catch throw被称为C异常,而try except __finally被称为C异常也叫SEH异常机制,windows内嵌的就是SEH异常机制, 当windows的编译器编译c的异常如try,catch的时候最终使用的仍然是SEH异常机制
    2. SEH异常机制支持硬件异常和软件异常,而C异常机制不支持硬件异常,而
      EXCEPTION_ACCESS_VIOLATION
      EXCEPTION_BREAKPOINT
      EXCEPTION_FLT_DIVIDE_BY_ZERO
      等等都属于硬件异常,所以C异常机制是捕获不到的
    3. 如果你确实想用c异常机制破获硬件异常,必须在所有的硬件异常发生之前调用_set_se_translator这个函数,传入一个能够将所有硬件异常转换为C异常机制的函数地址就可以了

    常见的除0异常不是C++异常。不是所有的异常都能捕获。

    参考:

    1. https://blog.csdn.net/xiaokuang5020/article/details/72886628 ↩︎
    2. https://bbs.csdn.net/topics/330040728中beginnow的回答 ↩︎