VC获得网页中JS的WINDOW对象再传递给其他浏览器对象的JS对象,关闭浏览器以后出错,那位大哥解决一下。STDMETHODIMP CMToolBar::GetWindowObject(BSTR security_code,VARIANT* pvarResult)
{
HRESULT hr=S_OK;
IHTMLDocument2 * m_spdoc2;
hr=m_spFrameWB->get_Document((IDispatch **)&m_spdoc2);
if(SUCCEEDED(hr)){
CComQIPtr<IHTMLWindow2> m_spwnd2;
hr=m_spdoc2->get_parentWindow(&m_spwnd2);
if(SUCCEEDED(hr)){
pvarResult->vt=VT_DISPATCH;
pvarResult->pdispVal=m_spwnd2;
}
}
return hr;
}m_spFrameWB 浏览器对象。

解决方案 »

  1.   

    hr=m_spFrameWB->get_Document((IDispatch **)&m_spdoc2); 这一句
      

  2.   


    CComPtr<IDispatch> spDispDoc;
    hr = m_spFrameWB->get_Document(&spDispDoc);
    CComQIPtr<IHTMLDocument2> m_spdoc2 = spDispDoc;
      

  3.   

    这个方法是返回给 JS Window 对象,代码可以执行可是,一旦调用了这个方法,在关闭浏览器的时候,就会 报告,发生访问冲突。或者哪位大侠 ,给个 返回 Window 对象给 脚本的 实例代码。
      

  4.   

    IEXPLORE.EXE 中的 0x01134c7b 处未处理的异常: 0xC0000005: 读取位置 0x01182134 时发生访问冲突
      

  5.   

    STDMETHODIMP CMToolBar::GetWindowObject(BSTR security_code,VARIANT* pvarResult)
    {
    HRESULT hr=S_OK;
    if(CheckSecurityCode(security_code)){
    CComPtr<IDispatch> m_spdip;
    hr=m_spFrameWB->get_Document(&m_spdip);
    if(SUCCEEDED(hr)){
    CComQIPtr<IHTMLDocument2> m_spdoc2 = m_spdip;
    hr=m_spdoc2->get_Script(&m_spdip);
    if(SUCCEEDED(hr)){
    CComBSTR bstrMember("window");
    DISPID dispid = NULL;
    hr = m_spdip->GetIDsOfNames(IID_NULL, &bstrMember,1,LOCALE_SYSTEM_DEFAULT, &dispid);
    if(SUCCEEDED(hr)){ 
    DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
    EXCEPINFO aexception;
    hr = m_spdip->Invoke(dispid,IID_NULL,LOCALE_USER_DEFAULT,DISPATCH_PROPERTYGET,&dispparamsNoArgs,pvarResult,&aexception, 0);

    if(SUCCEEDED(hr)){ 
    MessageBoxA("","",MB_OK);
    }
    }
    }
    }
    }
    return hr;
    }这样还是出现同样的问题,感觉有点像, window 对象被目标的 JS 释放了,当浏览器释放 window的时候 出错了。
      

  6.   

    怎么不直接m_spdoc2->get_parentWindow(
      

  7.   

    怎么不直接m_spdoc2->get_parentWindow(也不行,关闭浏览器的死后都出错。
      

  8.   

    你的功能是获取window,为什么在窗口关闭的时候还会执行进来?关闭的时候获取?
      

  9.   

    把一个窗口对象交给另一个对象,这个逻辑有点复杂,貌似在窗口关闭的时候必然会多释放一次,智能指针自己已经释放了,看看是不是有什么地方需要手动AddRef?
      

  10.   

    程序的主要思路是这样的, 开发了一个IE 工具条,工具条里面是一个  网页。在工具条的网页中用JAVASCRIPT 调用 STDMETHODIMP CMToolBar::GetWindowObject(BSTR security_code,VARIANT* pvarResult) 返回主页面的 window对象。当调用了获得了 window 对象以后 用 window.execScript("top.location.href='http://bbs.lxy.hi.cn/';"); 以后,关闭浏览器 会出错,报告 内存不能为"read"