【问题标题】:How to read COM TypeLib with C# or C++?如何使用 C# 或 C++ 读取 COM TypeLib?
【发布时间】:2014-06-15 03:52:15
【问题描述】:

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

我是COM世界的新手,所以我不知道如何获取描述COM对象的接口、方法和参数的信息。我读到了一个叫做 TypeLib 的东西,但我不知道怎么读。如何从中获取信息?

【问题讨论】:

    标签: c# java c++ com typelib


    【解决方案1】:

    官方 API 可在此处获取:Type Description Interfaces

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

    您可以通过谷歌搜索找到 TLBINF32.DLL(此链接今天似乎有效:tlbinf32.dll download,确保您获得的是 .ZIP 文件,而不是他们所谓的“修复程序”...)。请注意,它是一个 32 位的 DLL,因此您的程序必须编译为 32 位才能使用它。我不知道任何 64 位版本,但这里描述了如何将其与 64 位客户端一起使用:tlbinf32.dll in a 64bits .Net application

    在 2000 年 12 月的 MSDN 杂志文章中详细解释了如何使用这个库:Inspect COM Components Using the TypeLib Information Object Library。它是面向 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 的引用以使这些类型可用。您的链接可能涵盖了该内容,但由于我公司的网站屏蔽规则,我无法访问该网站...
    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 2019-06-02
    • 2011-05-16
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多