2010-05-28 79 views
2

我们有一个需要检查可能包含COM库(DLL和OCX)的文件夹的.NET应用程序。当我们遇到COM库时,我们需要完成一件事情是从COM DLL或OCX中提取GUID。如何从Win32 DLL或OCX中提取GUID

有没有一种直接的方式来使用.NET来做到这一点,而不使用第三方库?

回答

4

这应该适合你。它需要参考c:\ windows \ system32 \ tlbinf32.dll,但我假设没关系,因为它不是第三方组件。

Imports TLI 'from c:\windows\system32\tlbinf32.dll 

Dim reglib As TLI.TLIApplication = New TLI.TLIApplicationClass() 
Dim DLLPath As String = "c:\mycomponent.ocx" 
MsgBox(reglib.TypeLibInfoFromFile(DLLPath).GUID.ToString()) 
+0

+1,我也想过这个方法(参见http://msdn.microsoft.com/en-us/magazine/bb985086.aspx的为好),但我相信tlbinf32.dll才附带VS 6.0(和/或VB6),至少它不在我的系统上。 – 2010-05-28 17:05:14

+0

你可能是对的。我在开发机器上安装了VB6,用于维护一些旧的ActiveX控件和旧代码。但是,我发现了几个可以下载它的网站,您可能无需付版税就可以发布它。 – JohnFx 2010-05-28 19:14:16

+0

这个问题有C#标签。也许可以提供一个C#版本的答案? – 2015-09-08 18:59:38

1

您将不得不使用interop(P/Invoke和COM)来执行此操作。首先,您必须调用LoadTypeLib以获取类型库的ITypeLib接口。

从那里,您将不得不使用该方法来获取库的GUID,或者获取库中定义的任何事物的CLSID或IID实例。