这个宏展开的代码如下
#define AND_CATCH(class, e) } catch (class* e)  { ASSERT(e->IsKindOf(RUNTIME_CLASS(class)));  _afxExceptionLink.m_pException = e;区别如下:
Defines a block of code for catching additional exception types thrown in a preceding TRY block. Use the CATCH macro to catch one exception type, then the AND_CATCH macro to catch each subsequent type. End the TRY block with an END_CATCH macro.

解决方案 »

  1.   

    其实二者展开后的代码相同,不过一般用法不同而已
    加个例子CObject* pObj = NULL;
    CFileException ex;
    TRY
    {
       if (!sourceFile.Open(argv[1],
           CFile::modeRead | CFile::shareDenyWrite, &ex))
       {
           TRACE("Error:%s%d\n",__FILE__,__LINE__);
       }
       pObj = new CObject;
    }
    CATCH(CFileException,e)
    {
       return FALSE;
    }
    AND_CATCH(CMemoryException,e)
    {
       AfxMessageBox(AFX_IDP_FAILED_MEMORY_ALLOC);
       return FALSE;
    }
    END_CATCH
      

  2.   

    谢谢你的答复,问题是,我用
    TRY
    {
    }
    CATCH()
    {
    }
    CATCH()
    {
    }
    END_CATCH
    也一样正常运行。既然如此,为什么还要用AND_CATCH?
    还望说得详细一些,过后50分一定奉上。
      

  3.   

    不要用MFC的TRY&CATCH,早过时的东西了。
      

  4.   

    我要不知道是什么区别,一般我只用win32的__try语句