CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

高难度问题,dll怎么卸载?

楼主Lightest(一闪而过)2003-06-01 14:58:44 在 VC/MFC / 进程/线程/DLL 提问

在调用gethostname的时候,如下dll被加载了:  
  Loaded   'C:\WINNT\system32\rnr20.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\iphlpapi.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\icmp.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\mprapi.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\activeds.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\adsldpc.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\rtutils.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\setupapi.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\userenv.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\rasapi32.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\rasman.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\tapi32.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\dhcpcsvc.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\winrnr.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\rasadhlp.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\msafd.dll',   no   matching   symbolic   information   found.  
  Loaded   'C:\WINNT\system32\wshtcpip.dll',   no   matching   symbolic   information   found.  
   
   
  而gethostname在整个程序运行中我只需要调用一次.我不希望这些dll常驻内存,ws2_32.dll我动态加载的.调用gethostname后我释放了这个dll.但是如上的dll却没有跟着释放掉.这是什么意思?dll不是有应用计数吗?还有谁在用这些没有释放的dll?有没有办法释放掉这些dll?高手们请发表一下意见. 问题点数:100、回复次数:17Top

1 楼Lightest(一闪而过)回复于 2003-06-01 15:01:12 得分 0

用了就让你甩不掉Top

2 楼shuker(我是一只小花猪)回复于 2003-06-01 16:08:20 得分 0

如果你是静态链接的那就没法释放  
  如果你一定要释放那就只能用loadlibrary和freelibrary来做的  
  不知道高手还有没有别的更好的方法Top

3 楼wxfjb(鲸宝宝)回复于 2003-06-01 16:44:57 得分 5

静态的好像不行啊Top

4 楼awnucel(西大耻犹未雪,南京恨何时灭&抵制日货)回复于 2003-06-01 17:20:45 得分 5

upTop

5 楼ATField()回复于 2003-06-01 18:42:38 得分 10

我认为  
  Loaded   ...DLL  
  只是代表系统把这些DLL映射到你的程序的虚拟地址空间中了  
  并不一定代表这些DLL是当你的程序运行的时候才被加载  
  其实这些DLL你的系统一直都要用的,你不是在上网吗?  
  Top

6 楼Lightest(一闪而过)回复于 2003-06-02 00:18:43 得分 0

如果我不调用gethostname,这些dll都是不会加载的.gethostname是通过动态加载dll,调用getprocaddress得到的函数地址调用的.但是当释放dll时.上述列表中的dll却没有跟着释放.不动手做做试验想当然的,就别回答这个问题了.Top

7 楼ATField()回复于 2003-06-02 11:43:18 得分 0

The   LoadLibrary   function   maps   the   specified   executable   module   into   the   address   space   of   the   calling   process.  
  是map而不是load  
  Top

8 楼ATField()回复于 2003-06-02 12:32:45 得分 10

对了,你是怎么知道没有卸载的  
  VC应该不会在Output中显示出来吧Top

9 楼jyxy_ljw()回复于 2003-06-02 15:32:30 得分 10

upTop

10 楼Lightest(一闪而过)回复于 2003-06-02 21:30:46 得分 0

就没有人动手做测试吗?dll有没有卸载看exe占用的内存就知道.当你调用gethostname后内存占用会猛增1MB.Top

11 楼guid8519(guid8519)回复于 2003-06-02 21:38:47 得分 10

可以使用LoadLibrary和GetProcAddress来获取gethostname函数的地址  
  调用完毕后,把动态库FreeLibrary掉.  
   
  gethostname在winsock32.dll(系统目录下)中Top

12 楼Lightest(一闪而过)回复于 2003-06-03 11:59:27 得分 0

guid8519(guid8519)   你没有测试吧?Top

13 楼windleee(风子)回复于 2003-06-03 21:53:31 得分 10

系统启动的时候会自动调用WSOCK32。DLL,要不你的网络怎么启动,  
  如果DLL没有加载,调用的时候会加载,否则是映射DLL的使用纪录加1,  
  卸载是使用纪录-1,当使用纪录为0是,DLL从内存卸载  
   
  好像是这样的说...  
  Top

14 楼Lightest(一闪而过)回复于 2003-06-08 12:37:06 得分 0

windleee,不错,书上是这么说的,不过我敢肯定你没有这么去测试过.失望中....Top

15 楼rivershan(阿门)回复于 2003-06-08 13:21:47 得分 35

我的机器上VC6,调用gethostname后,  
  Loaded   exports   for   'ntdll.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\kernel32.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\ws2_32.dll'  
  Loaded   'C:\WINDOWS\system32\msvcrt.dll',   no   matching   symbolic   information   found.  
  Loaded   exports   for   'C:\WINDOWS\system32\ws2help.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\advapi32.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\rpcrt4.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\user32.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\gdi32.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\imm32.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\lpk.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\usp10.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\msctf.dll'  
  Loaded   exports   for   'C:\Program   Files\Kingsoft\Powerword   2003\Cjktl32.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\version.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\msctfime.ime'  
  Loaded   exports   for   'C:\WINDOWS\system32\ole32.dll'  
  Loaded   exports   for   'C:\WINDOWS\system32\msimtf.dll'  
   
  -----------------------------  
  用Dependens看这个程序,  
  TEST.EXE  
  WS2_32.DLL  
  MSVCRT.DLL  
        KERNEL32.DLL  
        NTDLL.DLL  
      WS2HELP.DLL  
        NTDLL.DLL  
        ADVAPI32.DLL  
        KERNEL32.DLL  
        ADVAPI32.DLL  
            NTDLL.DLL        
            KERNEL32.DLL  
            RPCRT4.DLL  
        ADVAPI32.DLL  
        NTDLL.DLL        
        KERNEL32.DLL  
        KERNEL32.DLL  
  USER32.DLL  
  NTDLL.DLL  
        KERNEL32.DLL  
  GDI32.DLL  
  NTDLL.DLL        
  KERNEL32.DLL  
  USER32.DLL  
  ADVAPI32.DLL  
  KERNEL32.DLL  
  NTDLL.DLL  
  Top

16 楼rivershan(阿门)回复于 2003-06-08 13:23:21 得分 0

前面的是VC调试用的,后面才是程序真正调用的  
  Top

17 楼zleeway(杂草)回复于 2003-06-08 14:05:51 得分 5

DLL调用后不会立刻卸装,因为window把它放在缓冲池,当前别的程序使用同一DLL时,可以加快程序的速度.  
  如果要改变这一行为,可以修改注册表  
  [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer]  
  "AlwaysUnloadDll"="1"Top

相关问题

  • C#下怎么卸载DLL呢?
  • 高难度问题,怎么用asp编程实现在服务器上注册dll组件
  • 这样的SQL怎么写?(高难度)
  • ■怎么卸载SP2?■
  • grud怎么卸载
  • 高难度~怎么在一个文字上打勾?
  • 这个程序用C#怎么实现(高难度)
  • DATAGRID高难度问题,怎么做多层标题呀?
  • 一个关于DLL调用的高难度问题,高手请进!
  • 高难度............................................

关键词

  • 卸载
  • dll
  • 内存
  • 测试
  • 调用
  • loaded
  • gethostname
  • 加载
  • winnt
  • exports

得分解答快速导航

  • 帖主:Lightest
  • wxfjb
  • awnucel
  • ATField
  • ATField
  • jyxy_ljw
  • guid8519
  • windleee
  • rivershan
  • zleeway

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo