求助: 有关Word方面的问题
我获得我机器上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);
}