而且,在打开多个带控件的窗口后,关闭一个时,也会引起IE死掉。
请大家指点一下,这种情况下最后一步该用那个消息来释放?
12 个解决方案
#1
sf
#2
既然不是公共插件?
为什么不释放掉才卸载呢?
为什么不释放掉才卸载呢?
#3
因为我们并不确认用户什么时候不再使用这个插件,所以没法提前释放。
#4
帮顶
#5
帮顶
#6
这个问题不仅仅是释放资源的问题吧。
看看你的控件版本是Release还是Debug,有的时候Dubug版本由于跟主程序使用的库类型不同会造成主程序死机。
另外,控件在使用资源的时候尽量在内部用完就释放,别等到最后再去这么做。对于一些公共的资源,如果使用的时候可以预料到下次使用
需要用户事件完成就可以先卸载了。
不管IE还是什么东西使用控件,在窗口关闭的时候都会首先清理其下级的子窗口包括控件。一般是会发送WM_DESTROY消息给控件,
最后的清理可以重载控件窗口的这个消息处理来完成吧。控件也是一级一级的来销毁的 不可能在APP类销毁后再销毁Ctrl类,也可以在控件的
下面类中做好清理。
看看你的控件版本是Release还是Debug,有的时候Dubug版本由于跟主程序使用的库类型不同会造成主程序死机。
另外,控件在使用资源的时候尽量在内部用完就释放,别等到最后再去这么做。对于一些公共的资源,如果使用的时候可以预料到下次使用
需要用户事件完成就可以先卸载了。
不管IE还是什么东西使用控件,在窗口关闭的时候都会首先清理其下级的子窗口包括控件。一般是会发送WM_DESTROY消息给控件,
最后的清理可以重载控件窗口的这个消息处理来完成吧。控件也是一级一级的来销毁的 不可能在APP类销毁后再销毁Ctrl类,也可以在控件的
下面类中做好清理。
#7
这个插件用了好几个其他DLL,这些DLL里也是个多线程的,也可能是几个DLL里写的不够干净造成的,但确实很头疼。
这个插件放在vc带的ActiveX Control Test container里还是正常,真的很头疼。
#8
这个只能分步调试了,你先把控件里面的资源,逐个屏蔽,看看到底是因为那个资源没有释放导致的
#9
重点看下控件类的SetClientSite和析构部分.
#10
有没有FinalRelease
#11
实现FinalRelease,在这里release.这是一种方法
另外可以生成一个自己的窗口,这个窗口不存在的时候,表示用户关掉了IE,接收destory消息,并处理,做release动作。
另外可以生成一个自己的窗口,这个窗口不存在的时候,表示用户关掉了IE,接收destory消息,并处理,做release动作。
#12
后来没有办法,由IE发送了个关闭信息来释放,这也就行了。
#1
sf
#2
既然不是公共插件?
为什么不释放掉才卸载呢?
为什么不释放掉才卸载呢?
#3
因为我们并不确认用户什么时候不再使用这个插件,所以没法提前释放。
#4
帮顶
#5
帮顶
#6
这个问题不仅仅是释放资源的问题吧。
看看你的控件版本是Release还是Debug,有的时候Dubug版本由于跟主程序使用的库类型不同会造成主程序死机。
另外,控件在使用资源的时候尽量在内部用完就释放,别等到最后再去这么做。对于一些公共的资源,如果使用的时候可以预料到下次使用
需要用户事件完成就可以先卸载了。
不管IE还是什么东西使用控件,在窗口关闭的时候都会首先清理其下级的子窗口包括控件。一般是会发送WM_DESTROY消息给控件,
最后的清理可以重载控件窗口的这个消息处理来完成吧。控件也是一级一级的来销毁的 不可能在APP类销毁后再销毁Ctrl类,也可以在控件的
下面类中做好清理。
看看你的控件版本是Release还是Debug,有的时候Dubug版本由于跟主程序使用的库类型不同会造成主程序死机。
另外,控件在使用资源的时候尽量在内部用完就释放,别等到最后再去这么做。对于一些公共的资源,如果使用的时候可以预料到下次使用
需要用户事件完成就可以先卸载了。
不管IE还是什么东西使用控件,在窗口关闭的时候都会首先清理其下级的子窗口包括控件。一般是会发送WM_DESTROY消息给控件,
最后的清理可以重载控件窗口的这个消息处理来完成吧。控件也是一级一级的来销毁的 不可能在APP类销毁后再销毁Ctrl类,也可以在控件的
下面类中做好清理。
#7
这个插件用了好几个其他DLL,这些DLL里也是个多线程的,也可能是几个DLL里写的不够干净造成的,但确实很头疼。
这个插件放在vc带的ActiveX Control Test container里还是正常,真的很头疼。
#8
这个只能分步调试了,你先把控件里面的资源,逐个屏蔽,看看到底是因为那个资源没有释放导致的
#9
重点看下控件类的SetClientSite和析构部分.
#10
有没有FinalRelease
#11
实现FinalRelease,在这里release.这是一种方法
另外可以生成一个自己的窗口,这个窗口不存在的时候,表示用户关掉了IE,接收destory消息,并处理,做release动作。
另外可以生成一个自己的窗口,这个窗口不存在的时候,表示用户关掉了IE,接收destory消息,并处理,做release动作。
#12
后来没有办法,由IE发送了个关闭信息来释放,这也就行了。