精易论坛

标题: dll卸载崩溃问题 [打印本页]

作者: 托尼233    时间: 2022-12-10 17:25
标题: dll卸载崩溃问题
有没有办法可以使用 FreeLibrary 安全的释放DLL,如果DLL内有线程正在运行会导致崩溃用 FreeLibraryAndExitThread 实现自卸载也不行,DLL内有线程的情况下也会蹦


所以
有没有什么方法,可以在卸载前关闭dll内的所有线程
或者
有没有其他方法,在dll有线程执行时可以安全卸载?

作者: sinewtec    时间: 2022-12-10 17:37
请使用正确的姿势
作者: eyyhs    时间: 2022-12-10 17:39
没啥一次性的解决办法,解决办法就是把正在运行的线程一个一个关闭,在卸载! 别无他法!
作者: 鹏书    时间: 2022-12-10 17:39
dll里面写一个销毁线程的命令卸载前调用一下
作者: 托尼233    时间: 2022-12-10 17:40
nikezhi 发表于 2022-12-10 17:39
dll里面写一个销毁线程的命令卸载前调用一下

怎么枚举dll里所有的线程?
作者: 托尼233    时间: 2022-12-10 17:41
eyyhs 发表于 2022-12-10 17:39
没啥一次性的解决办法,解决办法就是把正在运行的线程一个一个关闭,在卸载! 别无他法! ...

怎么枚举dll里所有的线程?
作者: 托尼233    时间: 2022-12-10 17:41
sinewtec 发表于 2022-12-10 17:37
请使用正确的姿势

怎么枚举dll里所有的线程?
作者: 尛龍科技    时间: 2022-12-10 17:46
Tips:dll卸载这个子程序里面加个销毁全部线程,这样就不崩溃了
作者: 托尼233    时间: 2022-12-10 17:54
尛龍科技 发表于 2022-12-10 17:46
Tips:dll卸载这个子程序里面加个销毁全部线程,这样就不崩溃了

现在就不知道怎么取枚举dll里面的线程
作者: dnxl    时间: 2022-12-10 18:13
如果DLL是自己写的,创建线程和结束线程不能自己想办法控制么
作者: 托尼233    时间: 2022-12-10 18:21
dnxl 发表于 2022-12-10 18:13
如果DLL是自己写的,创建线程和结束线程不能自己想办法控制么

类似 插件,调用别人写的dll,不知道有几条线程
作者: wtflxk    时间: 2022-12-10 18:21
精易模块  线程_枚举()
得到线程句柄 不用多说了吧
作者: 苗哥    时间: 2022-12-10 20:43
线程执行时不能卸载,你可以把所有线程句柄记录下来,释放前检查一遍有没有运行的,有的话就结束掉
作者: 苗哥    时间: 2022-12-10 20:44
托尼233 发表于 2022-12-10 17:40
怎么枚举dll里所有的线程?

你多加个命令,让DLL自己检查所有线程,然后传数组过来
作者: 福仔    时间: 2022-12-10 20:45
freelibrary就是把dll的内存给释放掉, 如果你有线程在执行, 那么他就会跑到一个不存在的地方, 因为dll被释放了, dll里那些函数都没了, 但是线程还在跑, 所以就崩了
自己在创建线程的时候记录线程ID或者线程句柄吧, 实在需要卸载dll, 那就把所有线程都暂停就行了
作者: 荖貢    时间: 2022-12-11 10:54
枚举线程,判断DLL的内存范围,在内存范围的线程起始地址,都强制结束后,在卸载DLL
作者: yinxixi    时间: 2024-7-5 00:56
6666666666666666666666666




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4