ActiveX插件退出的消息是什么?

时间:2023-02-01 19:22:07
做了一个插件,执行中,会遗留一些资源,需要在退出时释放。但含控件的IE窗口可能会被直接关闭,这时候就无法释放,导致整个IE会死掉。通过窗口的unload来实现时,很不方便。
而且,在打开多个带控件的窗口后,关闭一个时,也会引起IE死掉。

请大家指点一下,这种情况下最后一步该用那个消息来释放?

12 个解决方案

#1


sf

#2


既然不是公共插件?
为什么不释放掉才卸载呢?

#3


引用 2 楼 LBPeking 的回复:
既然不是公共插件? 
为什么不释放掉才卸载呢?


    因为我们并不确认用户什么时候不再使用这个插件,所以没法提前释放。

#4


帮顶

#5


帮顶

#6


这个问题不仅仅是释放资源的问题吧。
看看你的控件版本是Release还是Debug,有的时候Dubug版本由于跟主程序使用的库类型不同会造成主程序死机。

另外,控件在使用资源的时候尽量在内部用完就释放,别等到最后再去这么做。对于一些公共的资源,如果使用的时候可以预料到下次使用
需要用户事件完成就可以先卸载了。

不管IE还是什么东西使用控件,在窗口关闭的时候都会首先清理其下级的子窗口包括控件。一般是会发送WM_DESTROY消息给控件,
最后的清理可以重载控件窗口的这个消息处理来完成吧。控件也是一级一级的来销毁的 不可能在APP类销毁后再销毁Ctrl类,也可以在控件的
下面类中做好清理。

#7


引用 6 楼 Tinary3v0 的回复:
这个问题不仅仅是释放资源的问题吧。 
看看你的控件版本是Release还是Debug,有的时候Dubug版本由于跟主程序使用的库类型不同会造成主程序死机。 

另外,控件在使用资源的时候尽量在内部用完就释放,别等到最后再去这么做。对于一些公共的资源,如果使用的时候可以预料到下次使用 
需要用户事件完成就可以先卸载了。 

不管IE还是什么东西使用控件,在窗口关闭的时候都会首先清理其下级的子窗口包括控件。一般是会发送WM_…


    这个插件用了好几个其他DLL,这些DLL里也是个多线程的,也可能是几个DLL里写的不够干净造成的,但确实很头疼。

    这个插件放在vc带的ActiveX Control Test container里还是正常,真的很头疼。

#8


这个只能分步调试了,你先把控件里面的资源,逐个屏蔽,看看到底是因为那个资源没有释放导致的

#9


重点看下控件类的SetClientSite和析构部分.

#10


有没有FinalRelease

#11


实现FinalRelease,在这里release.这是一种方法

另外可以生成一个自己的窗口,这个窗口不存在的时候,表示用户关掉了IE,接收destory消息,并处理,做release动作。

#12


后来没有办法,由IE发送了个关闭信息来释放,这也就行了。

#1


sf

#2


既然不是公共插件?
为什么不释放掉才卸载呢?

#3


引用 2 楼 LBPeking 的回复:
既然不是公共插件? 
为什么不释放掉才卸载呢?


    因为我们并不确认用户什么时候不再使用这个插件,所以没法提前释放。

#4


帮顶

#5


帮顶

#6


这个问题不仅仅是释放资源的问题吧。
看看你的控件版本是Release还是Debug,有的时候Dubug版本由于跟主程序使用的库类型不同会造成主程序死机。

另外,控件在使用资源的时候尽量在内部用完就释放,别等到最后再去这么做。对于一些公共的资源,如果使用的时候可以预料到下次使用
需要用户事件完成就可以先卸载了。

不管IE还是什么东西使用控件,在窗口关闭的时候都会首先清理其下级的子窗口包括控件。一般是会发送WM_DESTROY消息给控件,
最后的清理可以重载控件窗口的这个消息处理来完成吧。控件也是一级一级的来销毁的 不可能在APP类销毁后再销毁Ctrl类,也可以在控件的
下面类中做好清理。

#7


引用 6 楼 Tinary3v0 的回复:
这个问题不仅仅是释放资源的问题吧。 
看看你的控件版本是Release还是Debug,有的时候Dubug版本由于跟主程序使用的库类型不同会造成主程序死机。 

另外,控件在使用资源的时候尽量在内部用完就释放,别等到最后再去这么做。对于一些公共的资源,如果使用的时候可以预料到下次使用 
需要用户事件完成就可以先卸载了。 

不管IE还是什么东西使用控件,在窗口关闭的时候都会首先清理其下级的子窗口包括控件。一般是会发送WM_…


    这个插件用了好几个其他DLL,这些DLL里也是个多线程的,也可能是几个DLL里写的不够干净造成的,但确实很头疼。

    这个插件放在vc带的ActiveX Control Test container里还是正常,真的很头疼。

#8


这个只能分步调试了,你先把控件里面的资源,逐个屏蔽,看看到底是因为那个资源没有释放导致的

#9


重点看下控件类的SetClientSite和析构部分.

#10


有没有FinalRelease

#11


实现FinalRelease,在这里release.这是一种方法

另外可以生成一个自己的窗口,这个窗口不存在的时候,表示用户关掉了IE,接收destory消息,并处理,做release动作。

#12


后来没有办法,由IE发送了个关闭信息来释放,这也就行了。