Архитектура СОМ. Интерфейс 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() - первой функции в таблице, которая должна быть реализована так, чтобы она
возвращала указатель на запрашиваемый интерфейс.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий