用SEH的TRY---EXCEPT能够捕获到下面的这种异常错误
TRY
{
  int a,b;
  b=0;
  a/=b;
}
EXCEPT()
{
// do something
MessageBox("Error");
}这段代码放在一个消息处理函数里是可以捕获到异常信息的,比如放在一个按钮事件处理函数里面,或者说WM_TIMER消息里面都可以捕获到。但是,我把它放到回调函数里面的时候,它无法捕获,直接告诉我程序出错。
这个回调函数是Windows多媒体定时器产生的,10ms执行一次。请问,如果在这种情况下捕获这种错误呢?附注:如何在多文档的入口处添加上捕获异常的代码?基于对话框的很好处理,但是基于多文档的如何添加呢?

解决方案 »

  1.   

    我这测试是可以显示err,不知道你的代码如何实现调用的
      

  2.   

    是想每10毫秒显示一个MessageBox吗?
      

  3.   

    但是,我把它放到回调函数里面的时候,它无法捕获,直接告诉我程序出错========================================================================你把他放在回调函数中,出现的异常在传给你之前,已经被Windows的窗口获得了,因此,执行不到你的异常处理代码.把它放在对话框下之所以可以,是因为首先Window首先匹配最近的异常处理代码,找到了,就处理,找不到,才扔给Windows的框架程序.
      

  4.   

    代码如下:
    首先在头文件中定义两个变量:
    UINT wTimerRes_1ms;
    UINT Timer_1ms;
    然后在CPP文件中定义如下变量(全局)
    LONGLONG QPart1,QPart2;
    double dfMinus, dfTim;
    double dfCheckNum;
    LARGE_INTEGER litmp;
    double dfFreq;CYourDlg *pDlg;然后定义回调函数:
    void PASCAL
    OneMilliSecondProc(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
    {
    QueryPerformanceCounter(&litmp);
    QPart2 = litmp.QuadPart;
    dfMinus=(double)QPart2-QPart1;
    dfTim=dfMinus/dfFreq;
    dfTim=dfTim*1000;
    pDlg->Run();//实验异常的代码
    QPart1=QPart2;
    }在Init里写如下代码:
    TIMECAPS tc;
    dfCheckNum=0;
    QueryPerformanceFrequency(&litmp);
    dfFreq = (double)litmp.QuadPart;
    timeGetDevCaps(&tc,sizeof(TIMECAPS));
    timeBeginPeriod(1);
    wTimerRes_1ms=10;
    QueryPerformanceCounter(&litmp);
    QPart1=litmp.QuadPart; if((Timer_1ms=timeSetEvent(wTimerRes_1ms,0,
    (LPTIMECALLBACK)OneMilliSecondProc,(DWORD)this,
    TIME_PERIODIC))==0)
    {
    AfxMessageBox("can't count");
    }
    else
    {
    //QueryPerformanceCounter(&litmp);
    //QPart1 = litmp.QuadPart;
    }在退出时候写入下面代码:
    timeKillEvent(Timer_1ms);
    timeEndPeriod(10);上面就是10ms执行一次Run的代码在Run里面写入如下调试代码:(C++捕获异常)
    int a,b;
    try 
    {
    b=0;
    a/=b;

    catch(CException *e) 
    {
    TCHAR buf[1024];
    e->GetErrorMessage(buf,1024);
    e->ReportError();
    e->Delete();
    } 结果:无法捕获。
    4inSky(黑棋子):你说的有些道理,但怎么解决这个