2013-10-02 4 views
1

C++로 만든 타사 DLL이 있는데 속성을 가져 오는 방법을 알 수 없습니다. 빠른 시계로 볼 수는 있지만 너무 많은 속성이있어서 스크롤 막대를 움직이는 데 어려움이 있습니다. 아마도 약 6000 개의 속성이있을 것입니다. 나는 그들에게 1을 쓰고 싶지 않아서 반사를 통해 그들에게 접근하려고 노력하고있다. 그래서 나는 그것들을 모두 가방에 버리고 사용자가 무엇을 보여줄지 그리고 무엇을하지 않을지 나중에 선택할 것이다.개체 동적 뷰 속성에 대한 반사

문제는 이러한 속성이 표준 반사 명령 GetProperties()에 표시되지 않는다는 것입니다.

다음 시도하면 너무 참조 : 그들 중

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

아무도 지능형 뭔가를 포함하지 않습니다. 나는 Object/Base/DynamicView 아래의 속성을 빠른 시계 아래에서 찾았습니다. 내가

+1

가능한 중복 (http://stackoverflow.com/questions/10615019/get-property-names-via-reflection-of- [COM 개체의 반사를 통해 속성 이름을 가져 오기] an-com-object) –

+0

문제는 '동적'을 사용하는 것이 아니라 기본 객체가 반사를 통해 완전히 노출되지 않은 COM 객체라는 것입니다. –

+0

분명히 적절한 검색어. 그러나 디스패치 마샬 러가 트릭을했습니다. 결국 나는 8223 개의 속성으로 끝났다. 그냥 전에 COM DLL을 통해 반사 않았다 추가하지만이 첫 번째 동적으로 노출 된 해당 메서드 및 속성입니다. – Franck

답변

0

D-스탠리의 코멘트가 좋은 방향으로 나를 지적 동적 뷰에서 속성의 목록을 얻으려면 반사를 사용하는 방법 단서가 없다는 것을 ((System.MarshalByRefObject)(((System.__ComObject)(o))))

알고 :

베이스의 유형을 것입니다. 거기에서 커플 링크를 따라 해결책을 찾았습니다. 똑같은 문제는 없었지만 충분히 가까스로 해결되었습니다. 여기

솔루션 : Reflection with IDispatch-based COM objects

관련 문제