【问题标题】:Reflection in C# not working with COM (and C++)C# 中的反射不适用于 COM(和 C++)
【发布时间】:2011-12-23 16:07:08
【问题描述】:

首先:我是 COM 的初学者。

我正在团队中开展大型项目。服务器部分是用 C++ 编写的。客户端是用 C# 编写的。它们通过 COM 进行通信。

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

这是检索属性的反射代码:

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 的东西都应该正确编写,因为它已经工作了很长时间(在我开始这个项目之前)。

【问题讨论】:

    标签: c# c++ .net reflection properties


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的。问题是,我对属性一无所知。他们甚至可以在未来改变 - 删除一些,添加新的或重命名现有的。不过还是谢谢。 :)
    • @zacharmarz 检查我的更新,添加了一些关于 TLB 分析工具的信息。
    【解决方案2】:

    问题在于嵌入互操作类型。我从 True 切换到 False 并且它正在工作。

    【讨论】:

      猜你喜欢
      • 2014-08-30
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多