mfc打开显示word文档出错,请各位高手解答!!!

ywzqxing 2014-09-16 09:28:52
void CEmbWordView::EmbWord()
{
CEmbWordCntrItem* pItem = NULL;
CEmbWordDoc* pDoc = GetDocument();
pItem = new CEmbWordCntrItem(pDoc);
CLSID clsid = {0};
CLSIDFromProgID(L"World.Document",&clsid);//调试时候,这行代码运行过后clsid为空值
pItem->CreateNewItem(clsid);
pItem->DoVerb(OLEIVERB_SHOW,this);//执行这条代码时候提示出错
}

我电脑上装了office 2007,可是程序执行过CLSIDFromProgID(L"World.Document",&clsid);代码后,clsid为空值,
执行pItem->DoVerb(OLEIVERB_SHOW,this);时报错,应该是clsid为空的原因,可是为什么clsid为空值啊,为什么得不到clsid,我的电脑上装了office 啊,另外,我又写了一个测试程序,如下:
void CEmbWordView::OnText()
{

_Application app; //定义一个WORD的应用对象

if(!app.CreateDispatch(_T("Word.Application"))) //启动WORD
{
AfxMessageBox(_T("居然你连OFFICE都没有安装吗?"));
return;
}
}

执行这个函数时运行正常,而且观察程序管理器后发现word在后台运行着的,可是为什么EmbWord()总是运行不通过呢?求各位大神指教啊?
...全文
257 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ywzqxing 2014-09-17
  • 打赏
  • 举报
回复
哎,刚接触这东西,总是出错
ywzqxing 2014-09-17
  • 打赏
  • 举报
回复
我从新又下了个word,问题解决了,但是现在有遇见新的问题,就是得不到IDispatch接口,程序如下, LPDISPATCH CEmbWordCntrItem::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(); } ASSERT(lpUnk != NULL); } LPDISPATCH lpDispatch = NULL; if(lpUnk->QueryInterface(IID_IDispatch,(LPVOID FAR*)&lpDispatch) != NOERROR){ TRACE0("Waring: does not support IDispatch!/n"); return NULL; } ASSERT(lpDispatch != NULL); return lpDispatch; } 程序执行这个函数的时候,出错,这时问什么啊?
枫舞的季节 2014-09-17
  • 打赏
  • 举报
回复
问题 0 new 后没有判断分配是否成功 1 CLSIDFromProgID 没有判断返回值,根据返回值就能够知道为何错了,是否 这个名称错了。 2 World.Document 这个肯定没有,因为World 和 Word 不同。笔误了吧。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧