C#中的反射不适用于COM(和C)

首先:我是初学者.在COM中.

我在大型项目团队中工作.服务器部分用C语言编写.客户端是用C#编写的.他们通过COM进行沟通.

现在 – 我在C#中有接口IA.我有对象o,其类型是A类(在C中实现IA – 它以某种方式通过COM传递).我想使用反射来获取该类型的所有属性,但它无法正常工作.它只返回我在代码中使用的那些属性.

以下是检索属性的Reflection代码:

Type[] ifaces = typeof(A).GetIterfaces();
foreach (Type iface in ifaces)
{
   foreach (PropertyInfo info in iface.GetProperties())
   {
       // it takes only those properties, I have used in C# code
   }
}

首先我认为它因COM而无效.但它很奇怪,它给了我所有属性,我在代码中提到. COM的所有内容都应该正确编写,因为它已经工作了很长时间(在我开始这个项目之前).

最佳答案 这可能会对您有所帮助:
Using Reflection with COM Interop

这只有在您知道属性名称的可能选项时才有用,如果您不知道但想要列出它们,则可能需要深入研究tlb文件.关于如何加载类型库并获取可以找到的AssemblyBuilder类的良好示例here. AssemblyBuilder.GetExportedTypes方法应返回TLB中定义的所有类型,然后您可以对这些类型使用反射.

我一直在努力解决这个问题,所以如果你开始工作,也许你可以在这里发布一个解决方案.

点赞