假如一个DLL自己动态载入了第2个DLL 然后这个DLL提前被FreeLibrary,那么如何FreeLibrary第2个DLL呢?

uaiia 2005-04-05 09:25:41
如果第2个DLL自身FreeLibrary自己,会引起程序崩溃,不知是否有人有解决办法。。。

一般来说,我们只能在第一个DLL释放的时候处理第2个DLL的释放,不过还是想知道提问的例子是否有特殊的解决办法
...全文
129 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
uaiia 2005-04-07
  • 打赏
  • 举报
回复
感谢 tabris17(四不象)
你说的的确是个可能
BigFanOfCpp 2005-04-07
  • 打赏
  • 举报
回复
当然不能让第二个DLL自己搞掉自己了,
这些DLL是加载到同一个进程的地址空间的,所以只有在进程里卸载掉才是OK了.
xhzxlqt 2005-04-06
  • 打赏
  • 举报
回复
当然一般的就不说了,大家都会
二般的(还没试过,理论上应该可以):

将LoadLibrary得到的HMODULE传出去,交给主程序,主程序在结束前,检查一下是否已经FREE过了,否则FREELIBRARY(HMODULE)
Panr 2005-04-06
  • 打赏
  • 举报
回复
一般来说,我们只能在第一个DLL释放的时候处理第2个DLL的释放
这个比较合理的说

然后可能就是第一个dll 把后者的句柄传出来,在主进程里释放,应该也可以的
uaiia 2005-04-06
  • 打赏
  • 举报
回复
LoadLibrary得到的句柄其实就是该DLL的载入基址,无须传送的,在第2个DLL内部也可以取得
sjcode 2005-04-06
  • 打赏
  • 举报
回复
关注中...
tabris17 2005-04-06
  • 打赏
  • 举报
回复
主要是dll中调用FreeLibrary自己后,FreeLibrary函数会返回到dll的代码中。而此时这个地址的虚拟内存不存在,所以就引发了“非法操作”。只要你在调用FreeLibrary的时候,设置一下ret地址就可以了




sinall 2005-04-06
  • 打赏
  • 举报
回复
在exe中保存第二个dll的句柄。
signoft 2005-04-05
  • 打赏
  • 举报
回复
第一个Dll FreeLibrary的时候,不会自调用第二个Dll的计数器自动减1么?
以前没有考虑过这么仔细
关注这个问题

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧