现象描述:
在VS2008中,使用了try...catch,但没有抛出异常而是直接报错。
代码如下:
FreeLibrary(hModule);
try
{
cout<<g_getA(25, 15)<<endl;//g_getA是动态链接库hModule中的方法
}catch(...)
{
cout<<"use dll error"<<endl;//应该打印输出
}
应该打印输出的地方直接报错中断。
try...catch异常的原因总结如下:
一[1]. 编译器问题
VC编译器会将try...catch模块给优化,导致其不能正常运行
在项目
->属性
->配置属性
->c/c++
->命令行
->附加选项
,添加 /EHa
我的问题通过该方法就能解决
二[2].异常机制问题
- try catch throw被称为C++异常,而__try __except __finally被称为C异常也叫SEH异常机制,windows内嵌的就是SEH异常机制, 当windows的编译器编译c++的异常如try,catch的时候最终使用的仍然是SEH异常机制
- SEH异常机制支持硬件异常和软件异常,而C++异常机制不支持硬件异常,而
EXCEPTION_ACCESS_VIOLATION
EXCEPTION_BREAKPOINT
EXCEPTION_FLT_DIVIDE_BY_ZERO
等等都属于硬件异常,所以C++异常机制是捕获不到的 - 如果你确实想用c++异常机制破获硬件异常,必须在所有的硬件异常发生之前调用_set_se_translator这个函数,传入一个能够将所有硬件异常转换为C++异常机制的函数地址就可以了
常见的除0异常不是C++异常。不是所有的异常都能捕获。
参考:
网友评论