System.SysUtils.Supports
Delphi
function Supports(const Instance: IInterface; const IID: TGUID; out Intf): Boolean;
function Supports(const Instance: TObject; const IID: TGUID; out Intf): Boolean;
function Supports(const Instance: IInterface; const IID: TGUID): Boolean;
function Supports(const Instance: TObject; const IID: TGUID): Boolean;
function Supports(const AClass: TClass; const IID: TGUID): Boolean;
C++
extern DELPHI_PACKAGE bool __fastcall Supports(const System::_di_IInterface Instance, const GUID &IID, /* out */ void *Intf)/* overload */;
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
function | public | System.SysUtils.pas System.SysUtils.hpp |
System.SysUtils | System.SysUtils |
Description
Indique si un objet ou une interface donnée gère une interface spécifiée.
Appelez Supports pour déterminer si l'objet ou l'interface spécifiée par Instance, ou la classe spécifiée par Aclass, gère l'interface identifiée par le paramètre IID. Si Instance gère cette interface, Supports la renvoie comme paramètre Intf et renvoie True. Si Aclass gère l'interface, Supports ne renvoie aucune interface, mais renvoie quand même True. Si l'interface spécifiée par IID n'est pas gérée, Supports renvoie False.
Sur la plate-forme Win32, pour déterminer si l'interface spécifiée par IID est gérée, Supports appelle la méthode QueryInterface de l'interface fournie (ou l'interface de l'objet fourni). Cependant, à l'inverse de l'appel direct de QueryInterface, Supports vous permet de passer en instance une valeur nil (Delphi) ou NULL (C++).
Sur la plate-forme .NET, Supports utilise les fonctionnalités de transtypage du .NET framework.
Avertissement
A l'exception de la surcharge qui vérifie si TClass implémente une interface, toutes les autres versions de Supports vont extraire une référence d'interface à partir d'un objet ou d'une autre référence d'interface, en causant l'incrémentation du compteur de références de l'objet dépendant, puis vont libérer l'interface à la sortie (en décrementant le compteur de références). Si le compteur de références d'un objet atteint zéro, l'objet sera détruit.
var
Obj: TInterfacedObject;
begin
Obj := TInterfacedObject.Create;
if Supports(Obj, IInterface) then { ... à ce moment, Obj sera libéré }
end;