case DISPID_BEFORENAVIGATE2:
//MessageBox(NULL,"DISPID_BEFORENAVIGATE2",NULL,NULL);
IHTMLElement *m_IHTMLElement;
m_IHTMLElement->put_innerHTML(_com_util::ConvertStringToBSTR("pbBody"));代码下载:http://www.gzyd.net/lael/iehelper.exe 应该是微软的代码,忘了原下载地址代码缺少的
#include "ExDisp.h"#include "ExDispID.h"
#include <strstrea.h>
#include "Mshtml.h"
#include <comutil.h>
#pragma comment(lib, "comsupp.lib")_com_util::ConvertStringToBSTR
_com_util::ConvertBSTRToString

解决方案 »

  1.   

    LPDISPATCH pDispElem = pReturn->pdispVal;
      IHTMLEventObj* pEvtObj;   
      HRESULT hr = pDispElem->QueryInterface(IID_IHTMLEventObj, (void**)&pEvtObj
     IHTMLElement* pElem;
    HRESULT hr = pEvtObj->get_srcElement(&pElem);
    pElem->put_innerHTML(_com_util::ConvertStringToBSTR("pbBody"));
    ==================================================
    而你的这个Element这个只是声明了一个变量而已
    HTMLElement *m_IHTMLElement;
    m_IHTMLElement->put_innerHTML(_com_util::ConvertStringToBSTR("pbBody"));
      

  2.   

    不行啊.一有这此代码就提示initialization of 'pDispElem' is skipped by 'case' label
    .....................
    用其它代码多少行都不会出这种错,很奇怪然后我加上 case..{}
    就可以通过编译,但运行IE就会出加载错误.
      

  3.   

    m_IHTMLElement这个变量没有初始化,是个空指针,initialization of 'pDispElem' is skipped by 'case' label
    -----------------------------------------------------
    声明以及初始化代码不要放到case子句里面去
      

  4.   

    //我用下面这段也会出错,!p=0不知什么意思, 还有我需要about:blank的时候也能插入HTML怎么办?
    CComPtr<IDispatch> pDisp;
    HRESULT hr = m_spWebBrowser2->get_Document(&pDisp);
    if (FAILED(hr)) return hr;
    CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> spHTML;
    spHTML = pDisp;
    if (spHTML)
    {
    CComPtr<IHTMLElement> m_pBody;
    hr = spHTML->get_body(&m_pBody);
    if (FAILED(hr)) return hr;
    BSTR bstrHTMLText;
    hr = m_pBody->get_outerHTML(&bstrHTMLText);
    if (FAILED(hr)) return hr;
    LPTSTR psz = new TCHAR[SysStringLen(bstrHTMLText)];
    lstrcpy(psz, OLE2T(bstrHTMLText));
    delete [] psz;
    }