用c++ try-catch 异常处理模块实现SEH底层异常处理。

最近接触windows系统的应用开发(也算是初次接触,一直都是用java来开发应用程序),遇到了一个我认为比较棘手的问题。 就是 相当多的异常通过try-catch块儿捕获不到,通过google和在csdn论坛上搜索得到了一些建议,最后我在《windows 核心编程》中找到了解决方法。
   SEH(结构化异常处理)是一种叫底层的异常处理形式(我的理解),我认为try-catch形式异常(《windows核心编程》中称其为c++的异常处理)应该是对SEH的一个封装吧或者是c++语言形式的重写。 不过c++捕获不到内存访问异常(我理解为java的NPE),可我的程序必须要处理类似的异常,具体解决方法如下:
   自定义一个class
#include  < eh.h >
#include 
" stdafx.h "
bool  bIsSetTanslator;
class  CSE {

public :
    
static void MapSEtoCE(){
        
if(!bIsSetTanslator)    {
            _set_se_translator(TranslateSEtoCE);
            bIsSetTanslator 
= true;    
        }


    }

    
operator DWORD() {return (m_er.ExceptionCode);}

private:

    CSE(PEXCEPTION_POINTERS pep)
{
        m_er 
= *pep->ExceptionRecord;
        m_context 
= *pep->ContextRecord;
    }

    
static void __cdecl TranslateSEtoCE(UINT dwEC,PEXCEPTION_POINTERS pep)
    
{
        
throw CSE(pep);
    }

private:
    EXCEPTION_RECORD m_er;
    CONTEXT m_context;
}
;

   在任何异常捕获之前一定要运行CSE的静态方法 MapSEtoCE()
    CSE::MapSEtoCE();
       
try {

        
* ( byte * ) 0   =   0 ;    
        
int  x  =   0 ;
        x 
=   5   /  x;
        
    }
         
catch (CSE se){
            cout 
<<   " exception "   <<  endl;
    }
  我对windows开发的研究还比较肤浅,请csdn的大牛们多多指点。
  先写来,如果发现理解的有问题,日后更改~  :)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值