Отражение в C # не работает с COM (и C ++) - PullRequest
4 голосов
/ 07 ноября 2011

Прежде всего: я абсолютный новичок в COM.

Я работаю в команде над большим проектом.Серверная часть написана на C ++.Клиентская сторона написана на C #.Они общаются через COM.

Теперь - у меня есть интерфейс IA в C #.И у меня есть объект o , тип которого является классом A (реализует IA в C ++ - он каким-то образом передается через 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, должно быть написано правильно, потому что оно работает долго (до того, как я попал в этот проект).

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Проблема была в типах взаимодействия Embed. Я переключился с True на False, и он работает.

1 голос
/ 07 ноября 2011

Это может помочь вам: Использование Reflection с COM Interop

Это поможет, только если вы знаете возможные варианты имени свойства, если вы не знаете, но хотите перечислить их,Возможно, вам придется погрузиться в файл TLB.Хороший пример того, как загрузить typelib и получить класс AssemblyBuilder, вы можете найти здесь .Метод AssemblyBuilder.GetExportedTypes должен возвращать все типы, определенные в TLB, и затем вы можете использовать отражение для этих типов.

Я боролся с этим, поэтому, если вы заработаете, возможно, вы могли бы опубликовать решение здесь.

...