微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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中定义的所有类型,然后您可以对这些类型使用反射.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐