见了鬼了,静态库RELEASE版本不能try,catch?
怕不经意间改动了什么东西,特地新建一个静态库,写了个函数产生异常:
int test()
{
try
{
MessageBox(GetFocus(),"开始","test",MB_OK);
LPRECT lprc = (LPRECT)0xCDCDCDCD;
return lprc->left;
}
catch(...)
{
MessageBox(GetFocus(),"异常已捕获","test",MB_OK);
return 0;
}
}
程序连接DEBUG版本的静态库,调用test运行正常,能弹出"异常已捕获"的信息,但是连接Release版本的静态库,调用test则无法捕获异常,系统报错内存0xCDCDCDCD不能读。奇怪的是我在调用程序test的时候加try,catch又能捕获异常,即:
try
{
test();
}
catch(...)
{
MessageBox(GetFocus(),"程序捕获异常","test",MB_OK);
}
是能捕获异常的,但这是程序捕获的,而不是在静态库里捕获。
不管程序是Debug还是Release版本,只要连接Release版本的静态库,test函数内部的异常捕获无效,照此情况,那我岂不是无法写出安全的静态库了?大家碰到过这种情况吗?