我在dll中加入如下代码 SHDocVw::IShellWindowsPtr m_spSHWinds;
if (m_spSHWinds == NULL)
{
  if (m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK)
{



AfxMessageBox("Failed");
CoUninitialize();
// EndDialog(1);
}
}当走到
m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK)
时候就死掉了不知道为什么?

解决方案 »

  1.   

    对COM多用try。。catch。
    否则出问题很容易死。
      

  2.   

    catch ( _com_error &e )
    {
    _bstr_t bstrSource (e.Source());
    _bstr_t bstrDescription (e.Description());
    CString strError;
    strError.Format("无法备份Sybase数据库。\r\n错误代码是:%08lx\r\n错误的原因是:%s\r\n错误源是:%s\r\n错误的描述是:%s\r\n", e.Error (), e.ErrorMessage (), (LPCTSTR) bstrSource, (LPCTSTR) bstrDescription);
    MessageBox (strError, bstrDescription,MB_OK);
    return false;
    }
      

  3.   

    我这不是连接数据库的,这个是ie的监控程序,做到exe中没有问题,但是想做到dll中的时候没想到初始化都不成功!
      

  4.   

    我用了try catch ,但是当运行到
    m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK)
    还是会死掉,catch根本抓不到!郁闷阿!
    难道dll 中不可以用这样的com 吗?
      

  5.   

    gz仔细检查一下,是不是多线程问题事件问题改成其他方式创建,等等
    CLSIDFromString
    IIDFromString
    这些