Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

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

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

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

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

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

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

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



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS