C#不使用COM(和C#x2B;+;)中的反射

C#不使用COM(和C#x2B;+;)中的反射,c#,c++,.net,reflection,properties,C#,C++,.net,Reflection,Properties,首先:我是一个完全初学者 我在一个大项目的团队中工作。服务器部分用C++编写。客户端是用C#编写的。他们通过COM进行通信 现在,我有了C#中的接口IA。我有对象O,它的类型是类A(C++中实现IA,它通过COM)被某种方式传输。我想使用反射来获取该类型的所有属性,但它不能正常工作。它只返回我在代码中使用的那些属性 以下是检索属性的反射代码: Type[] ifaces = typeof(A).GetIterfaces(); foreach (Type iface in ifaces) {

首先:我是一个完全初学者

我在一个大项目的团队中工作。服务器部分用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的所有内容都应该正确编写,因为它工作了很长时间(在我开始这个项目之前)。

这可能会帮助您:

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


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

问题在于嵌入互操作类型。我从“真”切换到“假”,它正在工作。

是的。问题是,我对房产一无所知。他们甚至可以在将来更改-删除一些,添加新的或重命名现有的。不过还是要谢谢你@zacharmarz检查我的更新,添加了一些关于TLB分析工具的信息。