问题如下:(请对照后面的代码)
        1. 下面这个函数,有时能成功执行,有时会弹出 ASSERT 致命错误框。我跟踪调试过,经常到 pHD->write(pSFArray); 这句就ASSERT 致命错误,而且按F11也不能跟踪到write函数内部。
        
        2. 有时就是执行完毕了,但是对应的 Web Browser 控件的页面却没有显示,鼠标放上去是等待的图标。
 
        3. 有时又能成功执行,没有一点问题。   搞了很久,一直没找出错误原因。哪位大侠有经验,帮忙看看,THX !!
  代码如下: (m_exploreView 为 CWebBrowser2) void CGameInfoDlg::DisplayInExplore(CString strContent)
{
//显示出来 IHTMLDocument2* pHD=(IHTMLDocument2*) m_exploreView.GetDocument();
VARIANT* pVATable=NULL;
SAFEARRAY* pSFArray;
pSFArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
if(pSFArray!=NULL && pHD!=NULL)
{
SafeArrayAccessData(pSFArray,(LPVOID*) &pVATable);
BSTR bstrContent=strContent.AllocSysString();
pVATable->vt=VT_BSTR;
pVATable->bstrVal=bstrContent;
SafeArrayUnaccessData(pSFArray);
pHD->write(pSFArray);

}
else
{
MessageBox("数据显示出错!");
} SysFreeString(pVATable->bstrVal);
if(pSFArray!=NULL)
{
SafeArrayDestroy(pSFArray);
}}

解决方案 »

  1.   

    IHTMLDocument2::open
    IHTMLDocument2::close
      

  2.   

    帅哥, 我按照你的提示修改了一下,还是出现一样的问题。 我就是很奇怪,为什么有的时候可以,有的时候又出问题。
     
      我的QQ是8022647,能不能加我qq指导下? THX very much ...代码如下:
    LPDISPATCH lpdRet;
    IHTMLDocument2* pHD=(IHTMLDocument2*) m_exploreView.GetDocument();
    pHD->open(
         CComBSTR("text/html"),
     CComVariant(CComBSTR("replace")),
     CComVariant(CComBSTR("")),
     CComVariant((bool)1),
     &lpdRet
     );
    VARIANT* pVATable=NULL;
    SAFEARRAY* pSFArray;
    pSFArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
    if(pSFArray!=NULL && pHD!=NULL)
    {
    SafeArrayAccessData(pSFArray,(LPVOID*) &pVATable);
    BSTR bstrContent=strContent.AllocSysString();
    pVATable->vt=VT_BSTR;
    pVATable->bstrVal=bstrContent;
    SafeArrayUnaccessData(pSFArray);
    pHD->write(pSFArray);
    pHD->close();
    }
    else
    {
    MessageBox("Display Error!");
    }
        lpdRet->Release();
    SysFreeString(pVATable->bstrVal);
    if(pSFArray!=NULL)
    {
    SafeArrayDestroy(pSFArray);
    }
      

  3.   

    你没判断HTML文档的ready state
      

  4.   

    在程序初始化中,如OnInitDialog() 中,先m_exploreView.Navigate("about:blank",NULL,NULL,NULL,NULL);一般就不会出错了;Navigate("...")和void CGameInfoDlg::DisplayInExplore(CString strContent)两者间可稍隔一点儿时间,如:200毫秒