none
ActiveX在IE11下面IDispatch* 指针赋值的诡异问题 RRS feed

  • 问题

  • 我用vc++写的一个ActiveX,定义一个属性为IDispatch*接口:

    [propget, id(7), helpstring("property onStatus")] 
    HRESULT OnStatus([out, retval] IDispatch* *pVal);
    [propput, id(7), helpstring("property onStatus")] 
    HRESULT OnStatus([in] IDispatch* newVal);

    STDMETHODIMP CDoc2HtmlCtl::get_OnStatus(IDispatch **pVal)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState())
    *pVal = m_pWndHidden->m_pOnStatus;
    return S_OK;
    }

    STDMETHODIMP CDoc2HtmlCtl::put_OnStatus(IDispatch *newVal)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState())
    CreateHiddenWindow();
    m_pWndHidden->m_pOnStatus = newVal;
    return S_OK;
    }
    接口把IDispatch指针保存在本地。

    在IE中调用如下:
    function onStatus() {...}

    wordctl = new ActiveXObject("WebHelperX.Doc2HtmlCtl");
    wordctl.OnStatus = onStatus;
    wordctl.OnStatus(); // 问题行

    IE6-IE8,运行正常。
    但是测试IE11时,问题行出现内存崩溃。不知道为什么这个IDispatch指针莫名其妙的丢失。而且是刚刚附完值的情况。

    ActiveX调试,wordctl.OnStatus = onStatus 赋值操作执行正常,onStatus函数对象可以在c++中调用。

    2014年12月24日 3:07

答案

全部回复

  • 问题已解决:

    m_pWndHidden->m_pOnStatus->AddRef();

    2014年12月24日 4:30
  • 你好,

    我们很高兴你的问题得到了解决,同时谢谢你共享这解决方案。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年12月24日 10:03