Как перечислить все коклассы, которые реализуют определенный интерфейс COM? - PullRequest
4 голосов
/ 13 декабря 2010

Я опишу проблему настолько просто, насколько смогу;

Допустим, у нас есть com-клиент, который определяет несколько интерфейсов.

В целях улучшения функциональности нашего com клиента; Несколько независимых компаний разрабатывают и внедряют com-серверы, которые реализуют интерфейс. Возможно, целевая машина может иметь com-серверы, которые реализуют тот же интерфейс.

Теперь вот проблема;

Наш com-клиент не имеет представления о com-серверах на целевой машине, потому что они будут разрабатываться независимо. Но, тем не менее, мы можем попросить независимые компании следовать определенной процедуре установки.

Теперь вот вопрос;

Какую технику мы должны использовать, чтобы выяснить все совместимые серверы связи, развернутые на целевом компьютере, а затем создать экземпляры необходимых объектов?

Ответы [ 2 ]

4 голосов
/ 14 декабря 2010

Нет стандартной службы каталогизации COM, о которой я знаю, хотя COM + может что-то иметь. Взгляните на HKCR\Component Categories, вы найдете GUID типа компонентов. Подобно 0DE86A57-2BAA-11CF-A229-00AA003D7352, описанному как «Класс реализует IPersistPropertyBag». Coclass объявляет эту же направляющую в своем CLSID\{guid}\Implemented Categories. Это похоже на хороший сценарий для вашего сценария.

Вам нужно будет выбрать гид и сообщить об этом авторам компонентов. Они должны написать ключ реализованных категорий со своим установщиком.

Это все еще довольно неловкое затруднение с клавишами CLSID, вы не хотите делать это очень часто. Но, по крайней мере, вам не придется загружать библиотеки DLL для обнаружения интерфейсов, которые могут иметь всевозможные неприятные побочные эффекты. Я бы порекомендовал в вашем меню «Параметры» диалоговое окно, позволяющее пользователю начать сканирование и выбрать, а также хороший способ отключить некорректно работающие компоненты.

Кстати, проблема поддержки, которую это может вызвать, обычно заставляет приложения работать из «одобренного» списка.

0 голосов
/ 16 декабря 2010

У Ганса была отличная идея.

Я ранее не использовал Категории компонентов, но я предлагаю вам избегать прямого касания реестра, поскольку MS предоставляет API для доступа к категориям компонентов. Проверьте это:

http://msdn.microsoft.com/en-us/library/ms692551(v=vs.85).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...