在网上有看到说实现接口 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禁止图片

解决方案 »

  1.   

    CAtlBrCon::Invoke(...)加上一个messagebox(null)看看!
      

  2.   

    STDMETHODIMP CAtlBrCon::Invoke(DISPID dispidMember, REFIID riid,
                                   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
      

  3.   

    我设置断点了,这个也是测试有没有被调到,问题的关键应该是实现IDispatch::Invoke方式有问题,不知道这个实现接口要怎样写法
      

  4.   

    To:oyljerry
    这篇文章我看过,我的理解是“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);这个成员函数进去,都没被调用到
      

  5.   

    我设置断点了,这个也是测试有没有被调到,你的工程师exe的?
      

  6.   

    我的项目是已经把网页下载到本地文件了,想了个笨的方法,把src= 的标签做成无效的 aaa=,这样就达到效果了