gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:45:02 25 4
gpt4 key购买 nike

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

我是COM领域的新手,不知道如何获取描述COM对象的接口(interface)、方法和参数的信息。我读到了一个叫做 TypeLib 的东西,但我不知道如何阅读它。我如何从中获取信息?

最佳答案

官方 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...
}
}
}

关于c# - 如何用 C# 或 C++ 读取 COM TypeLib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23360770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com