Шаг 147.
Среда программирования Visual C++.
Архитектура СОМ. Интерфейс IUnknown

    На этом шаге мы рассмотрим интерфейс IUnknown .

    Интерфейс IUnknown, показанный на рисунке 1, должен присутствовать в любом СОМ-компоненте.


Рис.1. Интерфейс IUnknown

    IUnknown содержит три метода, реализуемые Вами при создании CОM-объекта. В методе QueryInterface() Вы обеспечиваете клиентской программе механизм доступа к любому из интерфейсов, предоставляемых Вашим объектом.

    Поскольку один экземпляр компонента может одновременно обслуживать запросы нескольких клиентов, Вы должны создать в своем объекте счетчик использования. Этот закрытый элемент данных отслеживает число подключившихся клиентских приложений. Его обслуживают методы AddRef() и Release(). При обнулении значения счетчика компонент самоуничтожается.

    При создании СОМ-компонентов методы IUnknown должны быть указаны первыми в таблице vtable. Остальные методы, предоставляемые другими интерфейсами, перечисляются за ними.

    На рисунке 2 показан примерный вид таблицы vtable объекта Encoder, приведенного на рисунке 1 предыдущего шага.


Рис.2. Примерная структура таблицы vtable

    В vtable сначала перечислены методы IUnknown, за ними следуют методы, предоставляемые интерфейсом IEncode, а в конце - ICommunicate. Создавая экземпляр объекта Encoder, библиотека СОM получает указатель на начало vtable (на рисунке 2 - это pVtbl). Он может использоваться для вызова QueryInterface() - первой функции в таблице, которая должна быть реализована так, чтобы она возвращала указатель на запрашиваемый интерфейс.

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




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