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 руб./мес


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




 19 - IUnknown Методы AddRef и Relеase / ActiveX по шагам / Приложение

Шаг 19 - IUnknown Методы AddRef и Relеase

Итак, объект должен помнить количество обращений к нему. Для этого обычно в классе заводят переменную типа ULONG в разделе private, так как ни кто кроме функций класса не должны иметь к нему доступ.

class COAbsatract : public COleTestAbstract,
		    public IUnknown
{
......
private:
	ULONG mRef;
};

Прежде чем реализовывать методы AddRef и Release необходимо их описать в классе. Вот можно и так например.

class COAbsatract : public COleTestAbstract,
		    public IUnknown
{
public:
........
	STDMETHOD_ (ULONG, AddRef) (THIS);
	STDMETHOD_ (ULONG, Release) (THIS);
........
};

И естественно реализация нужна.

STDMETHODIMP_(ULONG) COAbsatract::AddRef() 
{
   return mRef++;
}

STDMETHODIMP_(ULONG) COAbsatract::Release() 
{
   ULONG uRet=--mRef;
   if (!uRet) delete this;
   return uRet;
}

Как видите эти две функции увеличивают или уменьшают счетчик. То есть COM сервер считает сколько на него есть ссылок. То есть при выдаче интерфейса клиенту счетчик ссылок увеличивается. Идея в том, что до того момента пока число ссылок больше нуля сервер будет находиться в памяти. Метод AddRef вызывает сам сервер. Это логично, кто кроме него может знать кому и сколько он отдал итнтерфейсов ? Это как тайна вклада в банке :-)

Release как раз наоборот уменьшает число ссылок на сервер. Клиент вызывает этот метод при желании отпустить интерфейс. Жизненный цикл сервера находится в этих двух функциях. Не путайте. Сколько раз вызываете AddRef столько раз и вызывайте Release.

Если вы обратили внимание, то эти два метода не только чего-то делают, но и возвращают информацию о том сколько сейчас ссылок.


| |
Автор Каев Артем.
[AD]