这2天研究如何通过wtl atl 制作广告拦截器,读了不少关于bho如何拦截广告的方式,可是自己一实验就非法,不知道如何解决,所以来着请教下各位大侠!
以下是我自己重载的函数:
void CMyTest::OnNewWindow2(IDispatch **ppDisp,BOOL *Cancel)
{
    *Cancel = 1;
}任何控制都没写,就是为了实验是否能挡住弹出网页,而且调试后确定正确的运行到该函数里了,但是在sp2系统下ie非法了,如果不加这句就不会非法,请问谁有好方法解决一下?

解决方案 »

  1.   

    如果是sp2,试试 NewWindow3http://msdn.microsoft.com/workshop/browser/webbrowser/reference/events/newwindow3.asp
      

  2.   

    如果是BHO,NewWindow2 原形为 void NewWindow2 (IDispatch ** ppDisp,
        VARIANT_BOOL * Cancel
    );VARIANT_BOOL 为 short 型,windows 缺省定义 BOOL 型为 int 型
    short 型为 16 bit, int 型为 32 bit, 你的付值已经越界,非法操作在所难免呀,呵呵
      

  3.   

    按2位的方法做了,无效哈:
    以下是我的实验代码,不知道是否正确.
    void CMyTest::OnNewWindow3(IDispatch **ppDisp,VARIANT_BOOL *Cancel,DWORD dwFlags,BSTR bstrUrlContext,BSTR bstrUrl)
    {
        *Cancel = VARIANT_TRUE;
    }
    void CMyTest::OnNewWindow2(IDispatch **ppDisp,VARIANT_BOOL *Cancel)
    {
        *Cancel = VARIANT_TRUE;
    }
    用任何一个方法都会在弹出窗口的瞬间非法掉,但是如果*Cancel = VARIANT_FAULS就不会非法
      

  4.   

    不好意思,我计穷老,非法操作 DUMP 的文件可以发出来不嘛