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

Ale*_*ext 4 c# c++ java com typelib

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

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

Sim*_*ier 6

官方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...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)