2

我有一个用 vb6 编写的 com dll。我需要编写 c# 代码来获取其中所有类的列表。

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

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

摘要:如何获取 com dll 中所有类的列表?

4

2 回答 2

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 (后一个选项很重要)也是如此。

于 2015-04-15T08:41:06.397 回答
2

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

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

于 2015-04-15T13:38:17.863 回答