Domanda

I supporta un'applicazione scritta in Delphi 3 e vorrei mettere in alcuni miglioramenti al codice sorgente durante l'attesa per l'opportunità di aggiornarlo ad una nuova versione di Delphi. Una delle cose che mi piace usare è interfacce. So Delphi 3 ha già il concetto di interfacce, ma sto avendo problemi a trovare il modo di fare l'equivalente di

if Supports(ObjectInstance, IMyInterface) then
È stato utile?

Soluzione

Scrivi la tua implementazione della funzione "sostiene". In Delphi 2009 è possibile utilizzare

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;

Prova:

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

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

La speranza che funzionerà in Delphi 3

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top