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

我是COM领域的新手,所以我不不知道如何获取有关描述COM对象的接口,方法和参数的信息。我读了一些叫做TypeLib的东西,但我不知道如何阅读。如何从中获取信息?

#1 楼

可以在此处找到官方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#中的示例控制台应用程序,它仅转储类型库(此处为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...
        }
    }
}


评论


我唯一要添加的是您需要在VisualStudio中专门添加对COM dll的引用,以使这些类型可用。您的链接可能涵盖了该内容,但是由于我公司的网站屏蔽规则,我无法访问该网站...

– Sam Storie
18年3月22日在18:47