Подобно тому как все классы в Delphi порождены от единственного родителя - класса TObject, все интерфейсные классы порождены от общего предка TInterf acedObject. Этот предок умеет распределять память для интерфейсных объектов и использует глобальный интерфейс IUnknow:

type TInterfacedObject = class(TObject, IUnknown) private FRefCount: Integer;
protected
function Querylnterface(const IID: TGUID;

out Obj): Integer; stdcall; function AddRef: Integer; stdcall; function _Release: Integer; stdcall; public

property RefCount: Integer read FRefCount;
end;

Интерфейс IUnknow, в свою очередь, является базовым для создания любого интерфсчЧса. Он объявлен так:

type IUnknow = interface

[' {00000000-0000-0000-С000-000000000046}' ] function Querylnterface(const IID:

TGUID out: Obj): Integer;
stdcall; function _AddRef: Integer;
stdcall; Function _Release: Integer;
stdcall;

В рамках этого интерфейса декларируются три метода. Метод __AddRef увеличивает на 1 счетчик ссылок на интерфейс, в то время как метод _JRelease уменьшает на 1 этот счетчик. Метод_AddRef пользователь вызывает всякий раз, когда он хочет получить доступ к интерфейсу, а метод JRelease вызывается, когда надобность в интерфейсе отпадает. Как только в счетчике останется ноль, соответствующий объект интерфейса (компонентного класса) перестает существовать и сам себя выгружает из памяти. Таким образом, интерфейсы (интерфейсные классы) порождают объекты с управляемым временем жизни. Метод Querylnterf асе предназначен для того, чтобы пользователь выяснил, поддерживает ли компонентный объект нужный интерфейс IID. Если это так, становится действительной ссылка Ob j на нужный компонентный объект, и метод возвращает ноль.

ПРИМЕЧАНИЕ -

Опытные программисты, использующие язык программирования С++, знают, что название метода не может начинаться символом подчеркивания. Сделано это для того, чтобы скрыть от программиста этот метод. Таким образом, ни один из методов интерфейса IUnknow не должен вызываться явно (хотя Delphi и предоставляет такую возможность).

1.2.2. Интерфейсные классы || Оглавление || 1.2.4. Псевдонимы методов


Искусство создания компонентов Delphi



Новости за месяц

  • Август
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс