double arrow

Unknown — базовый интерфейс COM

Интерфейс lUnknown обеспечивает минимальное «снаряжение» каждого объекта СОМ. Он содержит три операции и предоставляет любому объекту СОМ две функциональные возможности:

· операция Querylnterface() позволяет клиенту получить указатель на любой интерфейс объекта (из другого указателя интерфейса);

· операции AddRef() и Release() обеспечивают механизм управления временем жизни объекта.

Свой первый указатель на интерфейс объекта клиент получает при создании объекта СОМ. В качестве параметра операции Querylnterface задается идентификатор требуемого интерфейса (IID). Если требуемый интерфейс отсутствует, операция возвращает значение NULL.

Имеет смысл отметить и второе важное достоинство операции Querylnterface. В сочетании с требованием неизменности СОМ-интерфейсов она позволяет «убить двух зайцев»:

· развивать компоненты;

· обеспечивать стабильность клиентов, использующих компоненты.

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

В многоликой СОМ-среде бремя ответственности за решение вопроса о финализации должно лежать как на клиенте, так и на СОМ-объекте. Можно сказать, что фирма Microsoft (создатель этой модели) разработала самурайский кодекс поведения СОМ-объекта — он должен сам себя уничтожить. Возникает вопрос — когда? Когда он перестанет быть нужным всем своим клиентам, когда вытечет песок из часов его жизни. Роль песочных часов играет счетчик ссылок (СЧС) СОМ-объекта.

Правила финализации СОМ-объекта очень просты:

· при выдаче клиенту указателя на интерфейс выполняется СЧС+1;

· при вызове операции AddRef выполняется СЧС+1;

· при вызове операции Release выполняется СЧС-1;

· при СЧС=0 объект уничтожает себя.

Конечно, клиент должен помогать достойному харакири объекта-самурая:

· при получении от другого клиента указателя на интерфейс СОМ-объекта он должен вызвать в этом объекте операцию AddRef;

· в конце работы с объектом он обязан вызвать его операцию Release.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: