在一个辅助线程中调用CApplication为什么老失败?CApplication oExcel;
try
{
    oExcel.CreateDispatch("Excel.Application");
}
catch(...)
{
    oExcel.put_Visible(TRUE);
    oExcel.put_UserControl(TRUE);
}结果oExcel.m_lpDispatch的值总是为NULL值?为什么?

解决方案 »

  1.   

    原程序如下:
    UINT CRecvRgDlg::AutoDelThread(LPVOID lpParam)
    {
    CRecvRgDlg *dlg = (CRecvRgDlg*)lpParam;
    for(;;)
    {
    Sleep(2000);
    if(dlg->CheckAutoDel("RecvAutoDel"))
    {
    CApplication oExcel;
    try
    {
    oExcel.CreateDispatch("Excel.Application");
    oExcel.put_Visible(TRUE);
    oExcel.put_UserControl(TRUE);
    }
    catch(...)
    { }
    if(NULL == oExcel.m_lpDispatch)
    {
    AfxMessageBox("CApplication 失败!");
    }
    }
    }
    return 0;
    }为什么在线程里根本无法启动EXCEL?
      

  2.   

    在线程开始时初始化了吗?
    CoInitialize();
      

  3.   

    你安装了excel了吗?
    另外,用CreateInstance试下创建
      

  4.   

    我已经安装了EXCEL
    同样的语句在线程外能够正常对EXCEL进行读写,但在线程里却是失败的,不懂是什么原因?
      

  5.   

    试着用异常捕获CException, CException::ReportError看是否有异常报告出现?
      

  6.   

    子线程最好也要这样,CoInitialize();
      

  7.   

    在AutoDelThread一开始就加入CoInitialize
      

  8.   

    子线程没有初始化CoInitialize(NULL)