本帖最后由 EdwinWY 于 2010-03-31 10:21:53 编辑

解决方案 »

  1.   

    应该是注册信息被破坏了,内部链接的GUID不对。
      

  2.   

    app.CreateDispatch 内部也是调用的
    CLSIDFromProgID(), CoCreateInstance()你在app.CreateDispatch那里下个断点,跟进去看看是哪里出的错上代码:
    BOOL COleDispatchDriver::CreateDispatch(LPCTSTR lpszProgID,
    COleException* pError)
    {
    ASSERT(m_lpDispatch == NULL); // map prog id to CLSID
    CLSID clsid;
    SCODE sc = AfxGetClassIDFromString(lpszProgID, &clsid);
    if (FAILED(sc))
    {
    if (pError != NULL)
    pError->m_sc = sc;
    return FALSE;
    } // create with CLSID
    return CreateDispatch(clsid, pError);
    }BOOL COleDispatchDriver::CreateDispatch(REFCLSID clsid, COleException* pError)
    {
    ASSERT(m_lpDispatch == NULL); m_bAutoRelease = TRUE;  // good default is to auto-release // create an instance of the object
    LPUNKNOWN lpUnknown = NULL;
    SCODE sc = CoCreateInstance(clsid, NULL, CLSCTX_ALL | CLSCTX_REMOTE_SERVER,
    IID_IUnknown, (LPLP)&lpUnknown);
    if (sc == E_INVALIDARG)
    {
    // may not support CLSCTX_REMOTE_SERVER, so try without
    sc = CoCreateInstance(clsid, NULL, CLSCTX_ALL & ~CLSCTX_REMOTE_SERVER,
    IID_IUnknown, (LPLP)&lpUnknown);
    }
    if (FAILED(sc))
    goto Failed; // make sure it is running
    sc = OleRun(lpUnknown);
    if (FAILED(sc))
    goto Failed; // query for IDispatch interface
    m_lpDispatch = QUERYINTERFACE(lpUnknown, IDispatch);
    if (m_lpDispatch == NULL)
    goto Failed;
            ...HRESULT AFXAPI AfxGetClassIDFromString(LPCTSTR lpsz, LPCLSID lpClsID)
    {
    HRESULT hr;
    const CStringW strClsID(lpsz);
    if (lpsz[0] == '{')
    {
    hr = CLSIDFromString(const_cast<LPOLESTR>(strClsID.GetString()), lpClsID);
    }
    else
    {
    hr = CLSIDFromProgID(strClsID.GetString(), lpClsID);
    }
    return hr;}
      

  3.   

    app.CreateDispatch那个函数貌似没法F11进去
    改成如下直接传clsid,仍然失败。。
    CLSID clsid;
    HRESULT hr = CLSIDFromProgID(L"Excel.Application", &clsid);
    if(FAILED(hr)) {
       return;
       }
    if(!app.CreateDispatch(clsid))
    {
    return;
    }
      

  4.   

    不懂CoInitialize(NULL);感觉这个看起来多余