Шаг 146.
Среда программирования Visual C++.
Архитектура СОМ. Интерфейсы СОМ (общие сведения)

    На этом шаге мы приведем общие сведения об интерфейсах.

    Услуги Вашего СОМ-объекта доступны через один или несколько интерфейсов. Интерфейс СОМ - это множество логически взаимосвязанных методов. Для его идентификации служит GUID, именуемый идентификатором интерфейса (Interface Identifier, IID). Компоненты СОМ часто описываются в терминах модели "клиент-сервер" в которой СОМ-сервер - это компонент, предоставляющий свои услуги (методы) клиентским программам. В соответствии с этой моделью интерфейс является описанием услуг, предоставляемых компонентом.

    Доступ к предоставляемым интерфейсом методам Вы получаете через указатель на интерфейс, который содержит ссылку на vtable, таблицу указателей на функции, каждый из которых позволяет обратиться к отдельному методу интерфейса.

    На рисунке 1 показан СОМ-сервер Encoder, предоставляющий три интерфейса. IUnknown (его мы обсудим на следующем шаге) - обязательный интерфейс любого СОМ-компонента. Интерфейсы IEncode и ICommunicate созданы для предоставления услуг объекта Encoder. Рисунок 1 иллюстрирует нотацию, принятую по умолчанию для описания СОМ-компонентов. Методы, предоставляемые интерфейсами, показаны слева от диаграммы.


Рис.1. Компоненты и интерфейсы

    На рисунке 1 видно, что у компонентов и интерфейсов GUID различаются. Показанные здесь GUID - всего лишь идентификаторы, передаваемые в коде препроцессорной директивой #define для обращения к различным типам GUID. Как Вы узнаете позже, GUID - это большие шестнадцатеричные числа.

    Интерфейс логически отделен от компонента, который его предоставляет, то есть один и тот же интерфейс иногда предоставляет целое множество различных компонентов. Интерфейс похож на определение абстрактного класса в C++. Уникальность интерфейса обеспечивается уникальностью его IID. Выпустив собственную спецификацию интерфейса, Вы тем самым гарантируете любому его пользователю, что изменяться он не будет. Номера и порядок методов, так же как и типы параметров и возвращаемых значений, обязательно останутся теми же. Желая добавить или изменить методы, Вы обязаны определить новый интерфейс с другим IID.

    Тот факт, что клиент получает интерфейс как указатель на таблицу функций (vtable), может навести на мысль, что СОМ-объекты способны предоставлять только методы. Однако во многих языках, поддерживающих СОМ (например Microsoft Visual Basic) существует понятие свойств - открытых членов-данных, которые являются аналогами переменных-членов класса в C++. Компоненты, написанные в C++, реализуют свойства как пары методов - задающих значение скрытых классом переменных и извлекающих информацию из них.

    На следующем шаге мы рассмотрим интрефейс IUnknown.




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