我写了一个程序,是个单文档内嵌Excel的程序,我想通过输入命令行参数比如
demo.exe  C:/myexcel.xls 就打开myexcel文件,但是出现个问题,一添加参数后创建OLE对象就会崩溃掉,参数是能够接收到,我是在view类的OnInitialUpdate里面绘制我的实例的,一绘制对象就会程序崩溃,后来我在调试的时候只要添加命令行参数创建OLE对象就会失败,去掉参数就是正常的,请问下这个是什么原因?谢谢了

解决方案 »

  1.   

    应该没问题的,在app里的InitInstance函数处理参数。
    楼主的处理参数的代码是怎样的?
      

  2.   

    传递过来参数是好的,程序没加载EXCEL的时候也是好的,但是一加载过后就会出错,
    在view类里面:void CSDIViewView::EmbedAutomateExcelFromFiles(CString strPath)
    {
    //如果已经加载了新的EXCEL的话  if(this->m_pSelection != NULL)
    {
    m_pSelection->Delete();
    m_pSelection->Release();
    m_pSelection = NULL;  m_pExcel->ReleaseDisp();
    delete m_pExcel;
    m_pExcel = NULL;
     
    }
       
    BeginWaitCursor();
    CSDIViewCntrItem *pItem = NULL;
    TRY
    {
    CSDIViewDoc *pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    pItem = new CSDIViewCntrItem(pDoc);

    ASSERT_VALID(pItem);

                      //到这一句话就会崩溃掉,但是如果在程序没加参数在程序里面写死路径的话是对的,不解了..请教高人
    if(!pItem->CreateFromFile(strPath))
    {
    AfxThrowMemoryException();
    }

    ASSERT_VALID(pItem);
    pItem->DoVerb(OLEIVERB_HIDE,this);

    this->m_pSelection = pItem; //保存控制指针

    LPDISPATCH lpDisp;
    lpDisp = pItem->GetIDispatch(); //将excel对象关联到当前加载的项中
    m_pExcel = new COperatorExcel();
      m_pExcel->InitExcel(lpDisp);
    } CATCH(CException, e)
    {
    if (pItem != NULL)
    {
    ASSERT_VALID(pItem);
    pItem->Delete();

    }
    AfxMessageBox(IDP_FAILED_TO_CREATE);
    }
    END_CATCH EndWaitCursor();


    }
      

  3.   

    最郁闷的是写死路径后是能够生成正确的视图,但是写死后加一下参数(没处理参数,仍然是原先的正确程序) 程序在创建OLE EXCEL的时候就出错了....郁闷  老大去哪了- - 救命
      

  4.   

    在调用EmbedAutomateExcelFromFiles的时候是怎么处理的?
      

  5.   

    不是创建出错,忽略掉错误还能继续加载--估计是遇到了ASSERT(FALSE)之类的,仔细检查,中间可能隐含了错误
      

  6.   

    ASSERT(m_lpRootStg != NULL)这里错了,但是不晓得咋改- -~~ouyh12345(五岭散人) 谢谢了,不知道怎么解
      

  7.   

    算了 以后再解决 用Release就不会错了 = = ||| 谢谢ouyh12345(五岭散人)