2010-12-02 40 views
5

Je supporte une application écrite en Delphi 3 et je voudrais apporter quelques améliorations au code source en attendant l'opportunité de le mettre à niveau vers une version plus récente de Delphi. Une des choses que je voudrais utiliser est Interfaces. Je sais que Delphi 3 a déjà le concept d'interfaces, mais je ne parviens pas à trouver comment faire l'équivalent deQuel est l'équivalent dans Delphi 3 de Supports for Interfaces?

if Supports(ObjectInstance, IMyInterface) then 
+3

des thats wrapper pour IUnknown.QueryInterface http://msdn.microsoft.com/en- us/library/ms682521 (VS.85) .aspx –

Répondre

5

Écrivez votre propre implémentation de la fonction « Supports ». En Delphi 2009, vous pouvez utiliser

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; 

espère que cela fonctionnera dans Delphi 3

+5

Encore mieux de simplement l'appeler Supporte et ensuite quand vous avancez vous avez juste besoin de supprimer la déclaration et tout le code appelant peut rester le même. –