void COfficeView::OnFileSave() 
{
TRY{
LPDISPATCH lpDisp; 
lpDisp = (LPDISPATCH)m_pSelection->GetIDispatch();  Documents docs;
_Application app; 
_Document mydoc;
Documents my; mydoc.AttachDispatch (lpDisp,TRUE);
app=mydoc.GetApplication ();
mydoc.Activate ();          .........一般的CView 里面可以上面那么做.但是我的是CRichEditView. 没有m_pSelection->GetIDispatch() 的做法。并且已经打开的Word已经AutoRelease了。我的问题是如何获得当前Word文档(在RichEditView里)的LPDISPATCH ???请高手帮帮! 分不够可以加.....

解决方案 »

  1.   

    m_pSelection需要自己加上,并实现的
      

  2.   

    添加 m_pSelection 也就是添加 GetIDispatch() .LPUNKNOWN COfficeCntrItem::GetIDispatch()
    {
    ASSERT_VALID(this);  
    ASSERT(m_lpObject != NULL);   
    LPUNKNOWN lpUnk = m_lpObject;   
    Run();   
    LPOLELINK lpOleLink = NULL;  
    if (m_lpObject->QueryInterface(IID_IOleLink, (LPVOID FAR*)&lpOleLink) == NOERROR)   
    {   
    ASSERT(lpOleLink != NULL);   
    lpUnk = NULL;       
    if (lpOleLink->GetBoundSource(&lpUnk) != NOERROR)    
    {    
    TRACE0("Warning: Link is not connected!\n");    
    lpOleLink->Release();    
    return NULL;    
    }   
    ASSERT(lpUnk != NULL);   
    }    
    LPDISPATCH lpDispatch = NULL;  
    if (lpUnk->QueryInterface(IID_IDispatch, (LPVOID FAR*)&lpDispatch)!=NOERROR)   

    TRACE0("Warning: does not support IDispatch!\n");   
    return NULL;

    ASSERT(lpDispatch != NULL);  
    return lpDispatch; 
    }
    说明一下,我没有用InsertObject的办法.也就是没有上面的函数
      

  3.   

    问题我自己已经解决,谢谢大家的热心帮助!已经没有激活的Ole对象。所以是不可能获得LPDISPATCH 的解决的办法。打开Word文件时不要释放其对象。用QueryInterface即可