C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 17. Интерфейс IUnknown / Библиотека ATL / Visual C++

Visual C++. ATL
Урок 17. Интерфейс IUnknown

Интерфейс IUnknown - это предок для всех COM-интерфейсов. Это означает, что каждый интерфейс, который мы используем при создании ATL-компонентов, обязательно имеет те же методы которые имеет интерфейс IUnknown. Вообще говоря интерфейсы не обязательно имеют в качестве предка IUnknown (у интерфейса вообще может не быть предка), но COM-интерфейсы (и, в частности, ATL-интерфейсы) обязаны иметь этот интерфейс в качестве одного из предков (иначе они просто не будут являться COM-интерфейсами по определению).

Интерфейс IUnknown имеет три метода. Рассмотрим их всех.

AddRef - увеличивает счетик ссылок на наш компонент.

Release - уменьшает счетик ссылок на наш компонент

QueryInterface - позволяет выяснить, поддерживает ли наш объект другой COM-интерфейс (иными словами, позволяет выяснить, что в реальности записано в указателе на некоторый интерфейс).

Несколько слов по поводу первых двух методов. Дело в том, что наш компонент могут использовать несколько клиентов. Сначала один, потом еще один и т. п. При этом клиенты могут перестать использовать компонент - опять же сначала один, потом другой т. п. Спрашивается, как же компонент узнает, что его больше никто не использует? В какой момент он должен выгрузится из памяти? Для этого внутри компонента существует счетчик количества клиентов, его использующих. Каждый клиент, который начинает использовать наш компонент, вызывает AddRef и счетчик внутри компонента увеличивается на 1. Когда же клиент перестает использовать наш компонент, он вызывает Release и счетчик внутри компонента уменьшается на 1. И, как только этот счетчик станет равным 0, наш компонент уничтожается и занимаемая им память освобожается.