![]() |
![]() ![]() ![]() ![]() |
|
Создать базовый класс, основывающийся на 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 | ||||