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.   

    CoCreateInstance 是成功的,pUnknow->QueryInterface 失败!
      

  2.   

    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)
      

  3.   

    都一样,返回失败,直接查询IID_IDispatch就直接返回E_NOINTERFACE。
    我的环境是VS:2005,Office2003。不知道楼上几位老兄环境会不会有影响?
      

  4.   

    把CLSCTX_ALL换成CLSCTX_LOCAL_SERVER试试, 直接在CoCreateInstance的时候请求IDispatch接口, 执行完后WINWORD.EXE就应该启动了
      

  5.   

    yes ,you are right ,it needs CLSCTX_LOCAL_SERVER but not CLSCTX_ALL or CLSCTX_INPROC_SERVER.
    thanks for your help.