2013-10-02 30 views
1

我有一个用C++编写的第三方DLL,我无法弄清楚如何获取它的属性。我可以通过快速查看来看到它们,但是有太多属性,我无法使用滚动条移动。可能在6000个物业的某处。我不想一个接一个写他们,我试图通过反射来访问它们,所以我可以把所有这些都放在一个包里,用户稍后会选择显示什么和不显示什么。对象动态视图属性的反射

问题是,这些属性不知何故不显示在标准的反射命令下GetProperties();

如果尝试下面的太见:

PropertyInfo[] pi = o.GetType().GetProperties(); 
MemberInfo[] mi = o.GetType().GetMembers(); 
MethodInfo[] mti = o.GetType().GetMethods(); 

其中没有包含什么智能。我通过快速查看发现了 Object/Base/DynamicView下的属性。

基地将是类型:((System.MarshalByRefObject)(((System.__ComObject)(o))))

知道,我不知道如何使用反射来动态视图中得到的属性列表

+1

的可能重复(http://stackoverflow.com/questions/10615019/get-property-names-via-reflection-of- [通过COM对象的反射获取属性名称] an-com-object) –

+0

问题不在于你已经使用'dynamic',而是基础对象是一个COM对象,它没有通过反射完全暴露出来.. –

+0

我显然没有适当的搜索条件。但派遣编组做了诡计。最后,我结束了8223个属性,这比我的猜测还要多。只是为了添加我以前对Com DLL的反射,但是这是第一个动态公开它们的方法和属性的反射。 – Franck

回答

0

d-士丹利评论指出我在好的方向发展。我从那里找到了几条链接后的解决方案。没有完全相同的问题,但足够接近,它解决了我的问题。

这里的解决方案:Reflection with IDispatch-based COM objects