求助: 有关Word方面的问题

pubb1986 2007-08-27 07:18:43
我获得我机器上WORD的版本为Word.Application.8
我在用CreateDispatch("Word.Application.8") 但创建失败
在CreateDispatch函数中的AfxGetClassIDFromString()函数 返回为0
偶谁能解释下吗?
谢谢叻.

初始化函数代码如下:

void COutputWord::Init()
{
CString strDeviceName=m_strDeviceName;

LPDISPATCH pDisp;
LPUNKNOWN pUnk;
CLSID clsid;

const int nWordNum=10;
const CString WordProg[]=
{
"Word.Application.7"
, "Word.Application.8"
, "Word.Application.9"
, "Word.Application.10"
, "Word.Application.11"
, "Word.Application.12"
, "Word.Application.13"
, "Word.Application.14"
, "Word.Application.15"
, "Word.Application.16"
};
USES_CONVERSION;
CString strWordProg;
for(int nWordID=0; nWordID < nWordNum; ++nWordID)
{
::CLSIDFromProgID(A2OLE(WordProg[nWordID]), &clsid); //从注册表中获得信息
if(clsid != GUID_NULL)
{
strWordProg=WordProg[nWordID];
break;
}
}

if(clsid == GUID_NULL)
{
return;
}
if(::GetActiveObject(clsid, NULL, &pUnk) == S_OK)//如果word已经打开
{
VERIFY(pUnk->QueryInterface(IID_IDispatch,
(void**) &pDisp) == S_OK);
m_app.AttachDispatch(pDisp);
pUnk->Release();
m_bWordOpen=true;
TRACE(" attach complete\n");
}
else
{
if(!m_app.CreateDispatch(strWordProg))//创建word对象 这里创建失败
{
TRACE("Create Failed\n");
return;
}
m_bWordOpen=false;
TRACE(" create complete\n");
}

m_app.SetVisible(true);//显示word窗口

LPDISPATCH pDocuments;
pDocuments=m_app.GetDocuments();
Documents Documents;
Documents.AttachDispatch(pDocuments);

LPDISPATCH pDocument;

VARIANT FileName;
FileName.vt=VT_BSTR;
FileName.bstrVal=strDeviceName.AllocSysString();

VARIANT ConfirmConversions, ReadOnly;
VARIANT AddToRecentFiles, PasswordDocument;
VARIANT PasswordTemplate, Revert;
VARIANT WritePasswordDocument, WritePasswordTemplate;
VARIANT Format, Encoding, Visible;

ConfirmConversions.vt=VT_I2;
ReadOnly.vt=VT_I2;
AddToRecentFiles.vt=VT_I2;
PasswordDocument.vt=VT_BSTR;
PasswordTemplate.vt=VT_BSTR;
Revert.vt=VT_I2;
WritePasswordDocument.vt=VT_BSTR;
WritePasswordTemplate.vt=VT_BSTR;
Format.vt=VT_I2;
Encoding.vt=VT_I4;
Visible.vt=VT_I2;

CString strTemp="";
ConfirmConversions.iVal=0;
ReadOnly.iVal=0;
AddToRecentFiles.iVal=1;
PasswordDocument.bstrVal=strTemp.AllocSysString();
PasswordTemplate.bstrVal=strTemp.AllocSysString();
Revert.iVal=0;
WritePasswordDocument.bstrVal=strTemp.AllocSysString();
WritePasswordTemplate.bstrVal=strTemp.AllocSysString();
Format.iVal=0;
Encoding.lVal=0;
Visible.iVal=1;

//在外层已经处理了,如果文件在存在,那一定是打开的
CFileFind FileFinder;
if(FileFinder.FindFile(strDeviceName))
pDocument=Documents.Open(&FileName, &ConfirmConversions, &ReadOnly,
&AddToRecentFiles, &PasswordDocument, &PasswordTemplate,
&Revert, &WritePasswordDocument, &WritePasswordTemplate,
&Format);
else
pDocument=Documents.Add();

m_Document.AttachDispatch(pDocument);

LPDISPATCH pSelection;
pSelection=m_app.GetSelection();
m_Selection.AttachDispatch(pSelection);

VARIANT v1,v2;
v1.vt=VT_I2;
v2.vt=VT_I2;
v1.iVal=6;
v2.iVal=0;

m_Selection.EndKey(&v1, &v2);

LPDISPATCH pFont;
pFont=m_Selection.GetFont();
m_Font.AttachDispatch(pFont);
}
...全文
169 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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