【问题标题】:Get all classes in the com dll获取 com dll 中的所有类
【发布时间】:2018-11-22 04:46:11
【问题描述】:

我有一个用 vb6 编写的 com dll。我需要编写 C# 代码,让我获得其中所有类的列表。

我的目标是获取类并在 .net 中生成具有所有属性的类并创建一个映射类。

我只需要从 dll 中获取类列表。

总结: 如何获取我的 com dll 中所有类的列表?

【问题讨论】:

标签: c# reflection com tlbinf32


【解决方案1】:

我建议使用TLBINF32.dll。它是大多数 Windows 版本附带的 COM 组件。确保它是在提升的命令提示符下使用regsvr32.exe 注册的(连同您的 COM dll)。在您的 .NET 应用程序(编译为 x86)中引用它并使用 TLIApplication.TypeLibInfoFromFile 方法。从那里您可以遍历 COM 组件的类型库并获取公开的类、方法、接口和属性。

我们将此库用于各种实用程序。

【讨论】:

  • 似乎这个库在 Windows 10 中不再可用。还有其他方法可以实现这样的功能吗?例如使用 Windows API?
  • 最新版本适用于 Windows 10。我们将其用作构建过程的一部分。我不知道可能有什么许可限制,但就原始功能而言,它可以正常工作。
【解决方案2】:

使用反射来遍历 COM DLL 的 Interop 将为您提供类似于 COM CoClasses 和接口的类和接口。

如果您追求的是快速和简单,请将您的 COM DLL 添加为 Visual Studio 中的引用,并使用下面的代码遍历 Interop 程序集以查找类。如果它是一个 VB6 COM DLL,那么无论如何,一切都将是 IDispatch,但您可以选择在下面确定的类型上过滤具有 CoClass、Guid 或 InterfaceType 属性的对象(您没有指定您是在使用类还是 CoClasses)。

var classes = Assembly.GetAssembly(typeof(MyComDLL.RandomTypeFromWithin))
    .GetTypes()
    .Where(type => type.IsClass);

如果你真的想正确地做到这一点,丹尼斯在他的评论中链接的文章会更好,p/Invoke'ing LoadTypeLib 和walking ITypeLib 也是如此(后一个选项很重要)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2023-04-09
    • 2018-08-13
    相关资源
    最近更新 更多