Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создание собственных объектов с интерфейсом `IInterface` без механизма ссылочного учета в Delphi

Delphi , Программа и Интерфейс , Интерфейс

Создание собственных объектов с интерфейсом IInterface без механизма ссылочного учета в Delphi

Вопрос, поднятый в сообществе разработчиков, заключается в необходимости создания базового класса, аналогичного TInterfacedObject, но без механизма ссылочного учета. Это позволит использовать функционал интерфейсов без дополнительного подсчета ссылок, что может быть полезно в различных ситуациях, например, при работе с легковесными объектами или в случаях, когда подсчет ссылок не требуется.

Проблема

Разработчики часто сталкиваются с необходимостью создания объектов, поддерживающих интерфейсы COM, но без использования механизма ссылочного учета. В стандартной библиотеке Delphi такого класса нет, и разработчикам приходится писать свой собственный.

Решение

Существует несколько подходов к решению данной проблемы. Один из них — это использование класса TSingletonImplementation, доступного начиная с Delphi 2009. Он предоставляет реализацию интерфейса IInterface без ссылочного учета. Также в Delphi 11 Embarcadero добавили класс TNoRefCountObject, который также является реализацией IInterface без ссылочного учета.

Пример кода на Object Pascal (Delphi) для TSingletonImplementation:

type
  TSingletonImplementation = class(TObject, IInterface)
  protected
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
  end;

Пример кода, демонстрирующего ограниченную реализацию методов IInterface:

function TSingletonImplementation.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
  Result := E_NOINTERFACE;
end;

function TSingletonImplementation._AddRef: Integer;
begin
  Result := -1;
end;

function TSingletonImplementation._Release: Integer;
begin
  Result := -1;
end;

В данном коде методы _AddRef и _Release возвращают значение -1, что указывает на отсутствие ссылочного учета. Метод QueryInterface возвращает E_NOINTERFACE, что означает, что объект не поддерживает запрошенный интерфейс.

Альтернативные подходы

Разработчики также предложили свои реализации, например, класс TPureInterfacedObject или TArtInterfacedObject, которые позволяют включать или выключать ссылочный учет в зависимости от нужд разработчика.

Важные замечания

При использовании таких классов важно помнить о правильном управлении ресурсами и освобождении интерфейсов, чтобы избежать утечки памяти и других ошибок, связанных с неправильным управлением ссылочным учетом.

Заключение

Разработчикам Delphi, которым требуется создать объекты с интерфейсом IInterface без механизма ссылочного учета, можно использовать готовые решения, такие как TSingletonImplementation или TNoRefCountObject, либо реализовать свой собственный класс, следуя примерам, предоставленным сообществом. Важно учитывать особенности работы с интерфейсами и ссылочным учетом для обеспечения корректной работы приложения.

Создано по материалам из источника по ссылке.

Разработчики Delphi ищут способ создать объекты с интерфейсом `IInterface` без использования механизма ссылочного учета.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Интерфейс ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 14:53:58/0.003593921661377/0