佚名通过本文主要向大家介绍了
用IDispatch的方法创建Outlook或者Word失败!有没有遇到过这种情况的???等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 用IDispatch的方法创建Outlook或者Word失败!有没有遇到过这种情况的???
描述:
Query IDispatch 的时候失败(Word和Outlook都这样)。返回E_NOINTERFACE的错误。有没有高手知道原因?
开发环境是:Office2003
另外,我不能用#import的方式,所以各位就不要提醒我用#import了。
解决方案1:
是OleInitialize(0 ); 不是CoInitialize(0) 解决方案4:
描述:
CoInitialize(NULL);
HRESULT hr = S_OK;
IUnknown* pUnknown=NULL;
IDispatch* pOutlook = NULL;
CLSID clsid;
//wchar_t* pwstrSid=L"Outlook.Application";
wchar_t* pwstrSid=L"Word.Application";
hr = CLSIDFromProgID(pwstrSid,&clsid);
LPOLESTR strFunc = L"CreateItem";
if(SUCCEEDED(hr))
{
hr = CoCreateInstance(clsid,NULL,CLSCTX_ALL,IID_IUnknown,reinterpret_cast<void**>(&pUnknown));
if(SUCCEEDED(hr))
{
hr = pUnknown->QueryInterface( IID_IDispatch,(void**)&pOutlook);
pUnknown->Release();
....
}
Query IDispatch 的时候失败(Word和Outlook都这样)。返回E_NOINTERFACE的错误。有没有高手知道原因?
开发环境是:Office2003
另外,我不能用#import的方式,所以各位就不要提醒我用#import了。
解决方案1:
8-)
解决方案2:把CLSCTX_ALL换成CLSCTX_LOCAL_SERVER试试, 直接在CoCreateInstance的时候请求IDispatch接口, 执行完后WINWORD.EXE就应该启动了
解决方案3:int _tmain(int argc, _TCHAR* argv[])
{
// get word document CLSID
CLSID clsidWord;
::CLSIDFromProgID(OLESTR("Word.Application"), &clsidWord);
::OleInitialize( 0 );
HRESULT hr;
// start winword server
LPDISPATCH pDisp;
hr = ::CoCreateInstance(clsidWord, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pDisp);
if( SUCCEEDED(hr) )
{
}
::OleUninitialize();
return 0;
}
是OleInitialize(0 ); 不是CoInitialize(0) 解决方案4:
progid和clsid正确吗?