其返回值应该是布尔值吧,Can the following do the job?
try
{
if(!Application.CreateDispatch("Word.Application"));
{
......
}
}
catch(...)
{
... ...
}
...
}
try
{
if(!Application.CreateDispatch("Word.Application"));
{
......
}
}
catch(...)
{
... ...
}
...
}
2、如果上面的不成问题,跟踪调试,看一看 HRESULT 的值,用 ERRLOOKUP 查一下。
{
// If word is already running, attach to it; otherwise, start it
LPDISPATCH pDisp;
LPUNKNOWN pUnk;
CLSID clsid; TRACE("Entering CReadWordView::OnWordLoad\n");
BeginWaitCursor( );
::CLSIDFromProgID(L"Word.Application.8", &clsid); // from Registry
if(::GetActiveObject(clsid, NULL, &pUnk) == S_OK)
{
VERIFY(pUnk->QueryInterface(IID_IDispatch, (void**)&pDisp) == S_OK);
m_app.AttachDispatch(pDisp);
pUnk->Release( );
TRACE(" attach complete \n");
}
else
{
if(!m_app.CreateDispatch("Word.Application.8"))
{
AfxMessageBox("Micorsoft Word program not found!");
}
TRACE("create complete\n");
}
EndWaitCursor( );
}我用的是类型库,另外,在CReadWordApp::InitInstance( )中也要加上COM的初始化调用。