System.SysUtils.Supports

Aus Appmethod Libraries
Wechseln zu: Navigation, Suche

Object Pascal

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 */;

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
function public
System.SysUtils.pas
System.SysUtils.hpp
System.SysUtils System.SysUtils

Beschreibung

Gibt an, ob ein Objekt oder ein Interface ein bestimmtes Interface unterstützt.

Mit Supports ermitteln Sie, ob das in Instance angegebene Objekt (oder das Interface) oder die im Parameter AClass angegebene Klasse das im Parameter IID festgelegte Interface unterstützt. Wenn Instance das Interface unterstützt, gibt Supports das Interface im Parameter Intf und True zurück. Wenn AClass das Interface unterstützt, gibt Supports kein Interface zurück, sondern nur True. Wenn das in IID angegebene Interface nicht unterstützt wird, liefert Supports False.

Um auf Win32-Plattformen festzustellen, ob das Interface unterstützt wird, ruft Supports die Methode QueryInterface des bereitgestellten Interface (oder das Interface des bereitgestellten Objekts) auf. Im Unterschied zu einem direkten Aufruf von QueryInterface, kann bei Supports ein nil-(Object Pascal) bzw. NULL- (C++) Wert für die Instanz übergeben werden.

Auf der .NET-Plattform verwendet Supports die Typumwandlungsmöglichkeiten des .NET-Frameworks.

Warnung

Mit der Ausnahme der Überladung, die die Implementierung eines Interface von der Klasse TClass überprüft, werden alle anderen Versionen von Supports eine Interface-Referenz entweder aus einem Objekt oder aus einer anderen Interface-Referenz extrahieren (wodurch der Referenzzähler des zugrunde liegenden Objekts inkrementiert wird) und das Interface beim Verlassen freigeben (indem der Referenzzähler verringert wird). Für die Objekte mit einem null Referenzzähler wird diese Operation zum Objektfreigabe führen.

var 
  Obj: TInterfacedObject;
begin
  Obj := TInterfacedObject.Create;
  if Supports(Obj, IInterface) then { ... Obj wird nun freigegeben }
end;

Siehe auch