![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Создать базовый класс, основывающийся на IUnknownDelphi , Технологии , COM и DCOMСоздать базовый класс, основывающийся на IUnknown
Оформил: DeeCo If I want automatic garbage collection with interfaces, I use TInterfacedObject as base class. What should I use, if I don''t want automatic destruction? is there a similar common base class or do I have to implement the IInterface methods myself? I use this one: {== BaseNonRefcountIntfObjU ===========================================} {: This unit provides a base class with a non-reference counted implementation of IUnknown. @author Dr. Peter Below @desc Version 1.0 created 28 Mдrz 2002 Last modified 28 Mдrz 2002 } {======================================================================} unit BaseNonRefcountIntfObjU; interface type {: Derive classes that need a non-reference counted IUNknown implementation from this class. } TNonRefcountInterfacedObject = class(TObject, IUnknown) protected { IUnknown } function QueryInterface(const IID : TGUID; out Obj): HResult; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; end; implementation uses Windows; function TNonRefcountInterfacedObject.QueryInterface(const IID : TGUID; out Obj): HResult; begin if GetInterface(IID, Obj) then Result := S_OK else Result := E_NOINTERFACE end; function TNonRefcountInterfacedObject._AddRef: integer; begin Result := -1 // -1 indicates no reference counting is taking place end; function TNonRefcountInterfacedObject._Release: integer; begin Result := -1 // -1 indicates no reference counting is taking place end; end { BaseNonRefcountIntfObjU }. Приведенный код определяет базовый класс Если вы хотите создать объект, который не использует автоматическую подсчет ссылок, вы можете派827 класс от этого базового класса. Это означает, что вам нужно будет реализовать методы Вот краткое описание каждого метода:
Используя это базовое класс и реализуя эти методы самостоятельно, вы можете создавать объекты без автоматического сборки мусора при использовании интерфейсов. Вот простой пример использования этого базового класса:
В этом примере Помните, что при использовании интерфейсов без автоматического подсчета ссылок ответственность за очистку объектов от мусора лежит на вас. Это может включать реализацию деструктора или явное вызывание В статье рассматривается создание базового класса, не использующего автоматическое уничтожение объектов, и реализация интерфейса IUnknown в этом классе. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: COM и DCOM ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |