用win32封装WebBrowser成一个简单的浏览器,实现了一些必须的接口,如 IOleClientSite,IOleInPlaceSite等接口。访问一般的网站没有问题,但访问以下这几个地址时会崩溃掉:
https://mybank.icbc.com.cn/icbc/enperbank/index.jsp
 https://vip.icbc.com.cn/icbc/perbank/index.jsp
 https://mybank.icbc.com.cn/icbc/perbank/index.jsp
 https://pbank.95559.com.cn/personbank/common_logon.jsp访问一般的HTTPS站点是不会出现问题的,访问一些含有一些Activex控件的站点也是没问题的,比如中国银行的网站。请问这是为什么呢? 每次都是在::DispatchMessage(&Msg)发生中断。
请问该如何解决,谢谢

解决方案 »

  1.   

    引用 2 楼 skyxie 的回复:
    每次都是在::DispatchMessage(&Msg)发生中断。
    -------------------
    崩溃时的call stack没有啥有用的信息? 此时的Msg是啥值?
    估计是某些涉及到activex控件的安全接口实现的问题。
    此时MSG结构体的值为:
    &Msg 0x001af298 {msg=0x8002
    [/Quote]网上有人也遇到类似的问题,但没有找到解决方法,当message=0x8002是会遇到问题。http://www.eggheadcafe.com/software/aspnet/33700459/gui-freezing-in-msg0x8002.aspx
      

  2.   

    用vs 2010,vs 2008 添加 miscroft web browser控件访问这些站点也会出现这些问题
      

  3.   

    此问题已解决。。但没找到根本原因,
    方法如下:
    运行VS 2010(其他vs开发工具类似)visual studio 命令提示工具,输入如下指令即可:editbin /nxcompat:no 应用程序路径 也可以更改应用程序的属性,在属性里面的配置属性下面的链接器的高级标签页中,找到数据执行保护(DEP),选择否(/NXCOMPAT:NO)为什么要这样做,暂时还不得而知。这样做有点麻烦,就是每次重新编译后需重新运行一下这条命令。期待希望能找到更好的解决办法。 PS:/NXCOMPAT用于指定可执行文件与 Windows 数据执行保护功能DEP(Data Execution Prevention)兼容请注意,该选项只适用于32位的可执行文件。非32位的桌面版Windows(比如x64和IA64)总是会为64位的应用程序开启DEP。默认情况下,如果某个组件需要 Windows Vista (/SUBSYSTEM 6.0和更高版本),则会自动打开 /NXCOMPAT。/NXCOMPAT:NO可以用于指定应用程序和DEP不兼容。然而,管理员仍然可以强制为所有的应用程序开启DEP。因此,您总是应当测试您的程序和DEP的兼容性忘了写了,我使用的是win7系统。