Интерфейс IUnkown

Каждый объект СОМ обязательно имеет интерфейс IUnkown. Этот интерфейс имеет всего три метода, но они играют ключевую роль в функционировании объекта.

Метод QueryInterface возвращает указатель на интерфейс объекта, идентификатор IID которого передается в параметре метода, если такого метода объект не имеет, метод возвращает NULL.

Обычно при первом обращении к объекту клиент получает указатель на интерфейс. Так как любой интерфейс является потомком IUnkown, то любой интерфейс имеет и QueryInterface. Поэтому в общем случае не важно, какой именно интерфейс может использовать клиент. При помощи метода QueryInterface он может получить доступ к любому интерфейсу объекта.

Интерфейс IUnkown обеспечивает работу еще одного важного механизма объекта СОМ – механизма учета ссылок. Объект должен существовать до тех пор пока его использует хотя бы один клиент. При этом клиент не может самостоятельно уничтожить объект, ведь с ним могут работать и другие клиенты. Поэтому при передаче наружу очередного указателя на интерфейс объект увеличивает специальный счетчик ссылок на единицу. Если один клиент передает другому указатель на интерфейс этого объекта, то клиент, получающий указатель, обязан еще раз инкрементировать счетчик ссылок. Для этого он использует метод AddRef интерфейса IUnkown.

При завершении работы клиент обязан вызвать интерфейс Release интерфейса IUnkown. Этот метод уменьшает счетчик ссылок на единицу. После обнаружения счетчика объект уничтожает себя.


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



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