结构化异常:C++和结构化异常处理



# \"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优化掉.
Tags:  结构化程序设计 结构化面试 什么是结构化异常 结构化异常

延伸阅读

最新评论

发表评论