Что эквивалентно в Delphi 3 «Поддержка интерфейсов»? - PullRequest
5 голосов
/ 02 декабря 2010

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

if Supports(ObjectInstance, IMyInterface) then

1 Ответ

5 голосов
/ 02 декабря 2010

Напишите свою собственную реализацию функции «Поддержка».В 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;

Test:

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

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

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

...