# \"stdafx.h\"
# <windows.h>
using std;
Exception
...{
public:
void MapSEtoCE(void ) ...{__se_translator(TranslateSEtoCE); }
operator DWORD ...{ er.ExceptionCode; }
private:
Exception(PEXCEPTION_POINTERS pep)
...{
er = *pep->ExceptionRecord;
tx = *pep->ContextRecord;
}
void _cdecl TranslateSEtoCE(UINT dwEC, PEXCEPTION_POINTERS pep)
...{
throw Exception(pep );
}
private:
EXCEPTION_RECORD er;
CONTEXT tx;
};
_t( argc, _TCHAR* argv)
...{
Exception::MapSEtoCE;
try...{
*(*)0 = 0; // Access violation
x = 0;
x = 5 / x; // Division by zero
}
catch(Exception se)
...{
switch(se)
...{
EXCEPTION_ACCESS_VIOLATION:
...{
cout << \"Access Violation\" << endl;
}
;
EXCEPTION_INT_DIVIDE_BY_ZERO:
...{
cout << \"Division by zero\" << endl; [Page]
}
;
default:
...{
cout << \"Error code:\" << se << \" Unknown exception\" << endl;
}
;
}
}
0;
}
应该可以捕获所有异常包括已知、未知和无法预料
需要在ting中c/c+> project option中添加 /EHa .否则.release时会初VC优化掉.
最新评论