其实想问两个问题?
1.当关闭IE浏览器时,IE浏览器里的activex控件最先收到什么消息?
2.ACTIVEX控件中使用了CSOCKET,当我先断开连接再关闭IE,不会出现异常,当我在通信状态直接关闭IE会出现异常,异常在sockcore.cpp 667行:
661 void CSocket::Close()
662 {
663 if (m_hSocket != INVALID_SOCKET)
664 {
665 CancelBlockingCall();
666
667 VERIFY(AsyncSelect(0));
668 CAsyncSocket::Close();
669 m_hSocket = INVALID_SOCKET;
}
}
这个问题是怎么产生的?

解决方案 »

  1.   

    应该是
    AsyncSelect(0)失败
    原因是
    WSAEINPROGRESS   A blocking Windows Sockets operation is in progress
    英文不好,翻译不来。
      

  2.   

    那第一个问题是什么呢?
    1.当关闭IE浏览器时,IE浏览器里的activex控件最先收到什么消息?
      

  3.   

    应该是有1个阻塞的socket操作在进行, 所以你不能调用AsyncSelect(0),这个函数是用来取消所有的监听事件的
      

  4.   

    yuantao(cfan):
    AsyncSelect(0)是系统自己调用的
    我觉得问题不在这里
    问题是在怎么引起AsyncSelect(0)失败?
    我觉得这时,SOCKET已经被DESTROY,而程序又调用了AsyncSelect(0)函数失败
      

  5.   

    在wizzard里看了一下,有一个OnQuit事件,:Fired when application is quiting .也许是这个?
    还有一个windowclosing 添加这两个事件处理函数,弄两个断点,再调试一下,看是VERIFY先出现,还是先到断点,就可以解决了。
      

  6.   

    mfCVinci(沙漏之眼) :
    我在wizzard里找不到OnQuit事件事件呀
      

  7.   

    下面是图片地址
    http://bbs.wolf.net.cn:8080/attachment.php?s=c856dce2d4b4fdef9027c0385159c9c3&postid=2347370
      

  8.   

    mfCVinci(沙漏之眼) :
    可能是我没说清楚情况,我已经做好了一个OCX文件
    然后在HTM文件用<OBJECT
    id="ActDlg" classid=clsid:F49AD715-93D0-4DD5-9DA3-58337E867400
    width="800" height="600">
    </OBJECT>
    插入
    运行时没错,就关闭的时候会出现上述情况,你图片上的IDC_EXPOLER1应该是OCX自己带的控件吧
      

  9.   

    啊,理解错了。我现在只能想到 你的Activex 中 app的 ExitInstance()函数。
      

  10.   

    我在ActiveX中用的是SOCKET API, 封装类的析构函数主动关闭SOCKET就行了, 不用理会ActiveX在IE关闭时收到什么消息。
    在高流量中多次测试突然关闭IE,我的代码很稳定。
      

  11.   

    楼主和楼上的老大能不能介绍一下ActiveX怎么写的?
      

  12.   

    icelight(给我一个接口,我能驱动地球……………仪):
    现在的代码是别人写的,用的是网上DOWN的一个文件,现在不想去改动他的源码,怕改出问题
    现在已经解决了,马上给分
    mfCVinci(沙漏之眼) 
    是在WM_DESTROY消息里处理,非常感谢你们的帮助,尤其是mfCVinci(沙漏之眼)