Что эквивалентно в Delphi 3 поддержке интерфейсов?


Я поддерживаю приложение, написанное на Delphi 3, и хотел бы внести некоторые улучшения в исходный код, ожидая возможности обновить его до более новой версии Delphi. Одна из вещей, которую я хотел бы использовать, - это интерфейсы. Я знаю, что Delphi 3 уже имеет концепцию интерфейсов, но у меня возникли проблемы с поиском эквивалента

if Supports(ObjectInstance, IMyInterface) then
1 5

1 ответ:

Напишите свою собственную реализацию функции "Supports". В Delphi 2009 Вы можете использовать

function MySupports(const Instance: TObject; const IID: TGUID): Boolean;
var
  Temp: IInterface;
  LUnknown: IUnknown;
begin
  Result:= (Instance <> nil) and
           ((Instance.GetInterface(IUnknown, LUnknown)
             and (LUnknown.QueryInterface(IID, Temp) = 0)) or
            Instance.GetInterface(IID, Temp));
end;

Тест:

procedure TForm4.Button3Click(Sender: TObject);
var
  Obj: TInterfacedObject;

begin
  Obj:= TInterfacedObject.Create;
  if MySupports(Obj, IUnknown) then
    ShowMessage('!!');
end;

Надеюсь, что он будет работать в Delphi 3