设为主页
加入收藏
联系我们
返回首页
 
   
硬件故障 系统故障 软件学习
 
   
  您现在的位置>>首页>>系统优化>> 摆脱DLL地狱困扰之目前的困境  
 
     
 

 

摆脱DLL地狱困扰之目前的困境上

文章来源:网络


在  Windows  系统中,动态库版本冲突实在是一个老大难的问题了,为了解决这个问题,除了使用大量现有的工具外,你还可以利用丰富的  Windows APIs  函数构造自己的调试工具和实用程序。作为例子,本文将提供三个这种类型的工具,讨论如何利用它们来解决动态库的冲突问题。这三个工具分别是:  
DllSpy ——列出加载到系统中的所有  Dlls  以及所有使用这些  Dlls  的进程;  
ProcessSpy ——列出系统中所有正在运行的进程以及它们正在使用的  Dlls ;  
ProcessXP ——显示  Windows XP  所有并发运行的会话( Sessions )清单;  
从所周知,动态库“地狱”( DLL Hell )已经不是什么新鲜玩意儿了,如果你使用第三方的  Dlls ,肯定会碰到不少与它有关的问题,如找不到入口点,或者库版本不兼容等。 .NET  中允许 组件 的并行执行,减少了产生这种问题的几率,但是如果你还没有升级到  .NET  环境,那怎么办?针对这种情况,可用的方法是用不同的工具跟踪  DLL  的依赖性。但是用标准工具跟踪时,你可能最后得不到所要的信息。许多工具都没有你需要的功能,比如自动写日志文件,跟踪分析,仅在控制台操作脚本控制等。
本文我们先用一些现有的工具来考察系统中的运行进程,然后系统地研究本文提供的三个工具: DllSpy ,  ProcessSpy  和  ProcessXP ,以便在今后的开发或调试中使用这些工具和技术。
现有的工具
Depends.exe  是  Visual C++  自带的一个工具。它可能是我们经常使用的工具中最简单的一个工具了,其功能是列出某个应用程序或  DLL  需要的  DLLs 。这个程序在本站可以 下载 (更新版本请到下面这个地址下载: http://www.dependencywalker.com )。如果你需要看某个  DLL  或可执行文件的全路经,可以用它的上下文菜单进行设置:如图一:


图一   察看全路经
对于静态加载的情况(即应用程序在链接过程中将  dlls  对应的  lib  文件链接到程序中),这个工具非常好用,但对于版本较新的系统,大多使用  COM  编程接口,或者说是用  COM  对象编程模型,而  COM  对象的实例化都是运行时加载或者说动态加载某个  DLL  文件,然后通过  LoadLibrary  和  GetProcAddress  调用其中某个特殊的函数来实现的。你不知道这个  DLL  是何时、从哪里被加载的。
一种确定  DLLs  被动态加载的方法是找出需要被每一个进程加载的  DLL 。 Sysinternal  公司( http://www.sysinternals.com )提供了一个工具软件  ListDlls.exe 。它是一个控制台程序,其图形用户界面( GUI )版本为  Process Explorer 。如图二:


图二  Process Explorer  运行画面

     

上一篇:Windows2000 DNS服务器的区域类型
下一篇:摆脱DLL地狱困扰之目前的困境(2) 


【本站声明】本站刊载的部分内容全部来源互联网,对于此类文章本站仅提供交流平台,不为其版权负责。如涉及侵犯您的知识产权的文章,请联系我们,我们将尽快做出更正。并向您表示感谢!同时特别感谢对本站所有支持的网友。

 
 
综合搜索 百度 google 爱问 搜狗 中搜 雅虎 MP3 图片 flash 视频
您好!中国好用是残疾人创办站,欢迎你设为首页,你每一次的使用,就是一份爱心,对我们来说就是一份希望......