На этом шаге мы приведем общие сведения о COM-объектах.
Component Object Model (COM) - это двоичный стандарт, в котором определены способы взаимодействия программных продуктов написанных на разных языках или работающих на различных платформах. СОМ-компонент - это многократно используемый программный объект, соответствующий спецификациям СОМ.
СОМ-объекты позволяют создавать приложения в виде набора четко определенных компонентов, взаимодействующих друг с другом. Одним из преимуществ таких объектов является их способность обеспечивать взаимодействие независимо от того, где находится двоичный объект. Существенно также, что приложение способно подключаться к объекту динамически во время выполнения.
Например приложение, являющееся исполняемым файлом, может подключаться к СОМ-компоненту, находящемуся в DLL. А поскольку такая операция происходит динамически, то им не обязателно находиться в одном месте. В процессе нахождения и подключения двоичного объекта программа работает совместно с операционной системой. В СОМ определены все элементы, совместно используемые программой и операционной системой для обеспечения корректной работы динамического подключения.
На рисунке 1 показаны элементы, участвующие в этом процессе.
Рис.1. СОМ-элементы, используемые для поддержки динамического подключения
СОМ-объекты могут находиться как в DLL-, так и в ЕХЕ-файлах. Каждый их них в обязательном порядке должен быть зарегистрирован в операционной системе Windows. Сведения о регистрации хранятся в системном реестре, там же находится ClassID - уникальный в глобальном масштабе идентификатор класса в особом формате. Его еще называют GUID. Более подробно мы расскажем о нем далее.
При создании динамического подключения клиент идентифицирует зарегистрированный двоичный СОМ-объект по его ClassID. Библиотеки СОМ времени исполнения представляют собой неотъемлемую часть операционной системы Windows и позволяют клиентам находить и создавать объекты классов СОМ.
Получив ClassID, библиотеки СОМ просматривают основной раздел реестра HKEY_CLASSES_ROOT в поисках соответствующего СОМ-объекта. Найдя его, они создают его экземпляр и возвращают указатель на интерфейс объекта. Клиент использует этот указатель для вызова методов объекта. В противном случае (искомый объект обнаружить не удалось) клиент извещается об ошибке. Обычно приложение взаимодействует с таким динамически созданным объектом, вызывая его методы, перечисленные в указателе на его интерфейс. Если по замыслу объект должен предпринимать активные действия (инициировать взаимодействие с клиентской программой), Вам придется зарегистрировать в нем методы обработки событий. При соответствующих четко заданных условиях объект генерирует события, обрабатываемые этими методами.
Одна из особенностей СОМ - прозрачность местонахождения (location transparency). При создании приложений-клиентов нас не интересует, где работают используемые нами объекты - в нашем процессе или в каком-то другом, на этом или на удаленном компьютере.
На следующем шаге мы рассмотрим интерфейсы COM.