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

2023-11-29

我的公司创建了几个 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 位版本,但这里描述了如何在 64 位客户端中使用它:64 位 .Net 应用程序中的 tlbinf32.dll

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...
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 C# 或 C++ 读取 COM TypeLib? 的相关文章

随机推荐