在网上有看到说实现接口 IDispatch::Invoke 可以解决该问题,但是我在程序里面重写STDMETHODIMP CAtlBrCon::Invoke(...)原以为重写了会被调用到,但一直没被调用到,请高手解答一下是如何实现接口 IDispatch::Invoke?
...
case DISPID_AMBIENT_DLCONTROL:
pvarResult->vt = VT_I4;
pvarResult->lVal = DLCTL_DLIMAGES | DLCTL_VIDEOS | DLCTL_NO_SCRIPTS;
break;webbrowsermfcidispachinvoke禁止图片
...
case DISPID_AMBIENT_DLCONTROL:
pvarResult->vt = VT_I4;
pvarResult->lVal = DLCTL_DLIMAGES | DLCTL_VIDEOS | DLCTL_NO_SCRIPTS;
break;webbrowsermfcidispachinvoke禁止图片
LCID lcid, WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pvarResult,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
switch (dispidMember)
{
case DISPID_AMBIENT_DLCONTROL:
pvarResult->vt = VT_I4;
pvarResult->lVal = DLCTL_DLIMAGES | DLCTL_VIDEOS | DLCTL_NO_SCRIPTS;
break; default:
return DISP_E_MEMBERNOTFOUND;
} return S_OK;
}http://msdn.microsoft.com/en-us/library/aa770041(VS.85).aspx
这篇文章我看过,我的理解是“you need to implement your host's IDispatch”这个应该是说要重写实现那个函数,“When the WebBrowser Control is instantiated, it will call your IDispatch::Invoke”这个应该是说会自动调用前面写的那个函数,我的理解正确么?
但是怎么implement?
class CDlgBrowser : public CDialog,这个是引用webbrowser控件的窗体,我直接添加
STDMETHODIMP Invoke(DISPID dispidMember, REFIID riid,LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,VARIANT* pvarResult, EXCEPINFO* pExcepInfo,UINT* puArgErr);这个成员函数进去,都没被调用到