【发布时间】:2015-12-04 07:15:30
【问题描述】:
在大多数情况下,VB6 DLL 和 OCX 必须在使用前进行注册。在 Visual Basic 项目 (VBP) 文件中,引用的对象如下所列:
Object={70031B70-1070-0D70-AC0E-B049A0701010}#1.0#0; Component.ocx
Reference=*\G{000CD090-0D00-4F07-0707-80040E010704}#1.0#0#..\References\GeneralLibrary.dll#General Purpose Libraries
更新这些文件后,我需要更改我的 VB6 项目中的所有引用。由于 VBP 文件只是文本文件,因此可以使用文本解析来更新这些引用。需要注意的是,我需要提前知道每个组件和版本的 GUID。
经过一番搜索,我发现 Windows 中的 oleaut32.dll 库可用于从 DLL 收集信息。这可以通过 C# 使用 ITypeLib 和 ITypeInfo 来利用。
我能够搜索使用 C# 读取相关 DLL 文件以获取 GUID 和版本信息的方法。但是,ITypeLib 和 ITypeInfo 的可用文档没有任何示例。我也无法在网上找到任何示例。
示例代码:
class Program
{
[DllImport("oleaut32.dll", PreserveSig=false)]
public static extern ITypeLib LoadTypeLib([In, MarshalAs(UnmanagedType.LPWStr)] string typelib);
static void Main(string[] args)
{
ITypeLib dllLibrary;
ITypeInfo information;
dllLibrary = LoadTypeLib("C:\\common_files\\Common.dll");
dllLibrary.GetTypeInfo(0, out information);
Console.ReadLine();
}
}
问题
如何使用 ITypeLib 和 ITypeInfo 获取 DLL 或 OCX 的 GUID 和版本信息?
警告:由于我们系统的部署方式以及注册表中有许多同名的旧 DLL 工件,我想避免注册 DLL 然后从注册表中读取注册的内容.
我也找不到用于获取版本信息的 DLL,如 this question 中所述。
【问题讨论】: