Шаг 149.
Среда программирования Visual C++.
Архитектура СОМ. Элементы реестра, относящиеся к СОМ

    На этом шаге мы рассмотрим элементы реестра, которые используются при работе с COM-объектами.

    Устанавливая СОМ-объект на компьютере, Вы обязаны зарегистрировать его в системном реестре. На рисунке 1 показаны записи, создаваемые при такой регистрации.

    Записи при регистрации размещаются в HKEY_CLASSES_ROOT в подразделе CLSID. Именно сюда обращаются библиотеки при попытке найти и загрузить СОМ-объект. В разделе CLSID создается подраздел с именем, являющимся строковой формой CLSID объекта, который также в свою очередь должен содержать подраздел, предоставляющий сведения о сервере компонентов. Все это проиллюстрировано ниже:

  HKEY_CLASSES_ROOT\CLSID\{64CE33A0-6B03-11D3-9352-0080C7FA0C3E}\ 
  InprocServer32 = c:\Encoder\debug\Encoder.dll

    Имя подраздела, InprocServer32, информирует, что серверный компонент - это библиотека DLL, находящаяся на локальной машине.


Рис.1. Регистрация СОМ-объекта

    На один уровень ниже HKEY_CLASSES_ROOT Вы можете поместить раздел со строковым именем своего СОМ-объекта, которое не будет зависеть от версии программным идентификатором (ProgID). Создайте в нем подраздел CLSID с параметром, содержащим значение GUID Вашего объекта в строковом формате. Путь такой записи выглядит примерно так:

  HKEY_CLASSES_ROOT\Encoder\CLSID = {64CE33A0-6B03-11D3-9352-0080C7FA0C3E}
Средствами функции CLSIDFromProgID() клиентское приложение может извлечь CLSID из ProgID. Предоставляя ProgID, Вы облегчаете "жизнь" разработчику клиентского приложения, создающему экземпляр Вашего СОМ-объекта: избавляете его от необходимости вручную вводить в исходный текст CLSID - а при этом избежать ошибки довольно трудно. В исходном тексте клиентского приложения на Visual Basic СОМ-объекты всегда определяются по их ProgID, поэтому всегда регистрируйте ProgID, если планируете работу Ваших объектов с другими клиентами (не на C++).

    На следующем шаге мы рассмотрим создание объектов с помощью CoCreateInstance().




Предыдущий шаг Содержание Следующий шаг