Описание базового интерфейса IUnknown



Листинг 10.3.Описание базового интерфейса IUnknown

type
IUnknown = interface
[ '{ 00000000-0000-0000-C000-000000000046} ' ]
function QueryInterface(const IID: TGUID; out Obj): Integer; stdcall;
function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; end;

Синтаксис описания интерфейса похож на описание класса. Главное отличие заключается в том, что интерфейс может быть связан с глобальным уникальным идентификатором (Global Unique Identifier, GUID).

GUID — это 128-разрядное целое число, которое используется для уникальной идентификации интерфейсов. Так как в 128-ми разрядах можно закодировать большое количество чисел, GUID гарантирует глобальную уникальность идентификатора интерфейса. То есть, практически невозможно, чтобы на двух компьютерах GUID совпал. Алгоритм генерации GUID основан на аппаратной части компьютера (частота процессора, номер сетевой карты и т. д.). В результате работы алгоритма, который может быть реализован с помощью функции API CoCreateGUID( ), получается запись типа TGUID. Эту запись можно определить в виде строки следующего формата:

'{хххххххх-хххх-хххх-хххх-хххххххххххх}'

Для создания нового GUID в среде Kylix достаточно нажать комбинацию клавиш <Ctrl>
+<Shift>
+<G>
при работе редактора кода.

Итак, интерфейс IUnknown поддерживает три метода, которые наследуются всеми интерфейсами:

  • QueryInterface( ) — используется для создания запроса, поддерживается ли данный интерфейс, и если поддерживается, то метод возвращает указатель на него. Предположим, что имеется некоторый объект Object, который поддерживает несколько интерфейсов: Interface1, Interface2 и др. Для получения указателя на интерфейс Interface2 объекта Object вам нужно вызвать метод Interface2. QueryInterface( ) .
  • _AddRef ( ) — используется, когда получен указатель на данный интерфейс, и вы хотите использовать этот указатель. Метод _AddRef ( ) обязательно должен заканчиваться вызовом метода _Release ( ).


  • _Release ( ) — используется для завершения работы с интерфейсом.
Назад
Содержание
Вперед


Содержание раздела