Можно ли определить базовый тип COM-компонента по указателю на интерфейс в .NET взаимодействия? - PullRequest
0 голосов
/ 09 ноября 2011

Я использую библиотеку COM в .NET.Поставщик предоставил первичные сборки взаимодействия с документацией.Тем не менее, определенный метод возвращает указатель на интерфейс, но документация не говорит мне, что является базовым типом компонента (поэтому я понятия не имею, к каким другим интерфейсам я могу QI).

Можно ли определить, что является базовым компонентом, возвращаемым этим методом, если все, что у меня есть, это указатель интерфейса?

Ответы [ 4 ]

3 голосов
/ 09 ноября 2011

Нет, нет другого способа узнать, кроме как попробовать.Где полезное начало реальных попыток должно быть документации.Это ключевая особенность проектирования COM, реализация тщательно скрыта за интерфейсами.

На самом деле не отличается в .NET, за исключением того, что есть обходной путь Reflection, который вы не должны использовать.

2 голосов
/ 09 ноября 2011

В общем, простой ответ - нет. COM всегда скрывает лежащие в основе объекты, он не имеет таких усовершенствований, как C #.

Если вы владеете кодом, который его создал, конечно, вы можете отслеживать, или объект может вам сказать. Кроме того, вы можете попробовать некоторые хаки, такие как проверка загруженных библиотек в вашем процессе, запрос всех интерфейсов, но все это зависит от вашей конкретной проблемы.

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

Эта статья в журнале MSDN Magazine (включая исходный код VB) может быть полезна: Проверка объектов COM с отражением .

0 голосов
/ 29 ноября 2015

Если вы можете догадаться, что это может быть, вы можете спросить его, может ли он привести себя к этому и посмотреть, что он ответит. См. Метод QueryInterface интерфейса IUnknown . На самом деле он не сам себя приводит, он может возвращать некоторую реализацию из внутреннего объекта или из другого вспомогательного объекта, который он создает по требованию и т. Д.

Также можно посмотреть, реализует ли он ITypeInfo или IDispatch, и использовать их. Посмотрите уже упомянутую ссылку groverboy: Проверка объектов COM с отражением

...