http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx 里面的一段话说的事情 与我们看到的现象一致: ... If the process is terminating (the lpvReserved parameter is non-NULL), all threads in the process except the current thread either have exited already or have been explicitly terminated by a call to the ExitProcess function, ...但你说非MFC程序正常,就比较奇怪,我没有试过。
都是通过 lib文件静态加载
DLL_PROCESS_ATTACH与DLL_PROCESS_DETACH
我是要实现在DLL里边自己退出线程。
我写的一个VC6 MFC主程序静态加载DLL,DLL也会创建一个线程。主程序退出时,在DLL_PROCESS_DETACH被调用前,那个线程就已经被强行结束了,不过没有什么影响,就忽略没管。
... If the process is terminating (the lpvReserved parameter is non-NULL), all threads in the process except the current thread either have exited already or have been explicitly terminated by a call to the ExitProcess function, ...但你说非MFC程序正常,就比较奇怪,我没有试过。
我现在是要开发一个dll库给IE Activex控件使用,当IE进程关闭时,需要先调用deinit接口释放资源和关闭线程。但IE貌似不会通知Activex要退出。
我现在是要开发一个dll库给IE Activex控件使用,当IE进程关闭时,需要先调用deinit接口释放资源和关闭线程。但IE貌似不会通知Activex要退出。增加一个接口,这个接口的用处就是通知activex创建的线程退出,用脚本调用该接口即可。你看,别人做的页面关闭时会弹出个对话框,关闭IE时应该可以用自动调用脚本的。调用脚本时,调用一次新增的activex接口就可以了。
我现在是要开发一个dll库给IE Activex控件使用,当IE进程关闭时,需要先调用deinit接口释放资源和关闭线程。但IE貌似不会通知Activex要退出。你退出IE时,Active自己不是可以调用OnDestroy来进行销毁么,然后你在函数里面卸载掉你的dll和释放应该释放的资源!
其实我不怎么看明白LZ要干得什么事情,不知道我说的对不对题!!
我现在是要开发一个dll库给IE Activex控件使用,当IE进程关闭时,需要先调用deinit接口释放资源和关闭线程。但IE貌似不会通知Activex要退出。你退出IE时,Active自己不是可以调用OnDestroy来进行销毁么,然后你在函数里面卸载掉你的dll和释放应该释放的资源!
其实我不怎么看明白LZ要干得什么事情,不知道我说的对不对题!!刷新的页面时候,OnDestroy也会被调用,所以无法区分是IE关闭还是刷新页面。其实我一开始的问题是,为什么DLL创建的线程会在程序退出时,在进入DllMain之前就被强制退出。
后面说的IE ActiveX,是解释我为什么非要在dll里让线程自动退出。
该函数会先强制退出Dll里创建的所有线程,所以才卸载Dll,所以进入到DllMain时,线程都已经被退出了。解决办法就是"Hook" ExitProcess函数,在自定义的MyExitProcess里,
先正常关闭所有线程和释放资源,再调用系统的ExitProcess。