如何用C#或C ++读取COM TypeLib?

我的公司已经创建了几个COM对象,他们在.NET中愉快地使用它们。 但现在,我们的客户想要改为Java。 我认为使用JACOB或j-interop(我不确定它们中的哪一个)来执行某些任务会很有趣,但结果代码非常难以管理。 所以我想编写一个工具,可以读取COM库的TypeLib,然后生成Java包装类,用于隐藏所有那些无法管理的代码。

我是COM世界的新手,所以我不知道如何获取有关描述COM对象的接口,方法和参数的信息。 我读到了一些名为TypeLib的内容,但我不知道如何阅读它。 我怎样才能从中获取信息?

官方API可在此处获得: 类型描述接口 。

您可以直接在C ++中使用它,但我建议您使用.NET(我的样本中的C#)以及Microsoft很久以前编写的额外工具(我的日期是1997年),名为TLBINF32.DLL。 它也是一个COM对象,但是自动化(VBScript,Javascript,VB / VBA)和.NET兼容。

你可以找到它的TLBINF32.DLL谷歌搜索(这个链接似乎今天工作: tlbinf32.dll下载 ,确保你得到.ZIP文件,而不是他们称之为“修复者”……)。 请注意,它是一个32位DLL,因此您的程序必须编译为32位才能使用它。 我不知道任何64位版本。

如何使用此库将在2000年12月MSDN杂志的文章中详细解释: 使用TypeLib信息对象库检查COM组件 。 这是面向VB(不是.NET),但在.NET术语中翻译非常容易。

以下是C#中的示例控制台应用程序,它只转储类型lib(此处为MSHTML.TLB)的所有类型信息:

class Program { static void Main(string[] args) { TypeLibInfo tli = new TypeLibInfo(); tli.ContainingFile = @"c:\windows\system32\mshtml.tlb"; foreach (TypeInfo ti in tli.TypeInfos) { Console.WriteLine(ti.Name); // etc... } } }