Activex里调用Invoke函数在IE9下导致IE崩溃,IE8以下都正常,求解决办法!
附上源码。IDispatch *m_spCallBack;//内部与线程进行事件激活
HRESULT CMCCtrl::FireOnEvent(UINT uMsg, WPARAM wParam,LPARAM lParam, BOOL& bHandled)
{
VARIANT avarParams[2]={*((VARIANT*)(wParam)),*((VARIANT*)(lParam))};
if(m_spCallBack)
{
VARIANT varResult;
DISPPARAMS params = { avarParams, NULL, 2, 0 };
m_spCallBack->Invoke(0,IID_NULL,LOCALE_USER_DEFAULT,DISPATCH_METHOD,¶ms, &varResult, NULL, NULL);
}
OnEventCallBack(avarParams[0],avarParams[1]);
return S_OK;
}
// 设置消息回调
STDMETHODIMP CMCCtrl::SetCallBack(VARIANT scriptCallback)
{
m_spCallBack = scriptCallback.pdispVal;
return S_OK;
}
附上源码。IDispatch *m_spCallBack;//内部与线程进行事件激活
HRESULT CMCCtrl::FireOnEvent(UINT uMsg, WPARAM wParam,LPARAM lParam, BOOL& bHandled)
{
VARIANT avarParams[2]={*((VARIANT*)(wParam)),*((VARIANT*)(lParam))};
if(m_spCallBack)
{
VARIANT varResult;
DISPPARAMS params = { avarParams, NULL, 2, 0 };
m_spCallBack->Invoke(0,IID_NULL,LOCALE_USER_DEFAULT,DISPATCH_METHOD,¶ms, &varResult, NULL, NULL);
}
OnEventCallBack(avarParams[0],avarParams[1]);
return S_OK;
}
// 设置消息回调
STDMETHODIMP CMCCtrl::SetCallBack(VARIANT scriptCallback)
{
m_spCallBack = scriptCallback.pdispVal;
return S_OK;
}
这句就提示内存访问冲突然后就崩了
可参考下面的博客看一下。我也遇到这个问题,现在还没有解决。大家一起研究一下。
http://www.cnblogs.com/_franky/archive/2011/03/16/1986005.html