我的软件是用VB6编写的。出于诊断目的,我需要确定应用程序在客户计算机上加载和使用的实际DLL / OCX文件。
由于VB6 DLL(包括OCX文件)是COM库,因此它们是根据注册表中的信息间接加载的。这意味着可能使用的文件与开发/测试环境中使用的文件不同。有时在客户端环境中,如果没有此信息,这可能会导致难以诊断的故障。
(我的计划是在我的程序中构建一个诊断读数窗口,显示程序当时正在使用的库。)
答案 0 :(得分:1)
您可以使用Dependency Walker查找程序所依赖的DLL。
但OCX并不那么容易找到,因为它们是在运行时基于应用程序依赖性和通过Windows注册表注册的组件加载的。但您必须已经知道应用程序引用了哪些OCX组件 - 来自工具>参考以及您致电CreateObject
的所有地点。
答案 1 :(得分:1)
可以通过多种方式建立对DLL(或OCX文件)的运行时依赖关系。理想情况下,您需要考虑所有这些因素:
此答案特定于VB6,但许多其他编程语言也可以类似地工作。
建立运行时依赖性的机制:
在编译时,对于传统的动态链接库(不是COM的DLL)
Declare Function … Lib …
在编译COM DLL时
IMPORT
语句来揭示这些依赖关系。您可能需要在注册表中从那里查找一些GUID,以查看使用了哪些实际的DLL文件。在静态链接库的编译时(不是COM,不是DLL)
在运行时使用传统DLL(不是COM)
LoadLibrary()
之类的Win32 API任意加载DLL。在运行时获取COM DLL
CreateObject()
调用来任意加载类。重要提示:依赖关系可以相互链接。因此,实际上,您需要“遍历所有依赖项的链接”,直到建立所需内容的完整映射。在该映射中的某个位置,您可以在需要部署的内容与可以依靠其提供的操作系统或其他运行时环境之间划清界限。 (对于VB6,IMO应该相当宽泛地划出界线。)
您可能会认为所有这些使任务非常困难或乏味-我完全同意。 :)