bool bRet=false;
    CoInitialize(NULL);
   CString pErrMsg=_T("");
   ADODB::_ConnectionPtr pConn(__uuidof(ADODB::Connection));
   ADODB::_RecordsetPtr pRst(__uuidof(ADODB::Recordset));
   pConn->ConnectionString=(_bstr_t)CString(CPublic::szConnSqlString);
   //
   try
   {
   HRESULT hresult= pConn->Open("","","",ADODB::adConnectUnspecified);//此处出错,但捕捉不到   }
   catch(_com_error &ex)
   {
   CString pMsg;
   pMsg.Format(_T("加载信使号码时出错%s"),ex.ErrorMessage());
   ::PostMessage(CPublic::hMessengerDlg,WM_LOG,0,(LPARAM)pMsg.GetBuffer());
   pMsg.ReleaseBuffer();
   bRet=FALSE;
   }在运行到 pConn->Open程序崩溃,catch语句捕捉不到错误,请指点

解决方案 »

  1.   

    http://blog.csdn.net/zyq5945/archive/2010/04/29/5541280.aspx::PostMessage(CPublic::hMessengerDlg,WM_LOG,0,(LPARAM)pMsg.GetBuffer());
    pMsg.ReleaseBuffer();
    -->
    ::PostMessage(CPublic::hMessengerDlg,WM_LOG,0,(LPARAM)(LPCTSTR)pMsg);
    //打印调用ADO控件时产生的详细错误信息
    void dump_com_error(_com_error &e)
    {
    CString ErrorStr;
    _bstr_t bstrSource(e.Source());
    _bstr_t bstrDescription(e.Description());
    ErrorStr.Format( "\n\tADO Error\n\tCode = %08lx\n\tCode meaning = %s\n\tSource = %s\n\tDescription = %s\n\n",
    e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription );
    //在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息
    ::OutputDebugString((LPCTSTR)ErrorStr);
    #ifdef _DEBUG
    AfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR);
    #endif
    }try
    {
    //你的ADO代码
            
    }
    catch(_com_error& e)
    {
    dump_com_error(e);
      

  2.   


    try
    {
        //你的ADO代码
            
    }
    catch(...)
    {
        MessageBox("所有错误信息","提示!");
    } 一般OPEN错,都是有连接串造成的!检查一下连接串!
      

  3.   

    try
    {
        //你的ADO代码
            
    }
    catch(...)
    {
        MessageBox("所有错误信息","提示!");
      

  4.   

    先不管代码是错在哪里,是请问一下,为什么我用try{}catch(...){}捕捉不到该错误,而是让程序崩溃了?
      

  5.   

    应该是还没有到catch的地方已经崩溃了,程序直接退出了.