WEAKLINKRTTI-Direktive (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Liste der Delphi-Compiler-Direktiven - Index

Typ

Option

Syntax

{$WEAKLINKRTTI ON} oder {$WEAKLINKRTTI OFF}

Vorgabe

{$WEAKLINKRTTI OFF}

Bereich

Lokal


Anmerkungen

Normalerweise müssen alle Methoden, auf die mit der erweiterten RTTI zugegriffen werden kann bzw. die von ihr aufgerufen werden können, in eine Binärdatei compiliert werden. Ein Beispiel:

var 
  LContext: TRttiContext; 
  LType: TRttiType; 
begin 
  { Einen neuen RTTI-Kontext erstellen } 
  LContext := TRttiContext.Create();

  { TRttiType für eine gegebene Klasse TSomeClass ermitteln } 
  LType := LContext.GetType(TSomeClass);
 
  { Die Methode SomeMethod für die Klasse aufrufen } 
  LType.GetMethod('SomeMethod').Invoke(['FirstParameter', 2]); 
end;

In dem obigen Beispiel wird die Methode SomeMethod dynamisch aufgerufen. Es ist zur Link-Zeit keine Referenz auf SomeMethod vorhanden, daher würde beim normalen Linken die Methode nicht in die Binärdatei einbezogen. Code, der die RTTI verwendet, würde also beim Versuch, die nicht vorhandene Methode aufzurufen, fehlschlagen. Im obigen Beispiel hat TSomeClass erweiterte RTTI-Informationen, daher bezieht der Linker alle Methoden in die Binärdatei ein (auch die, die nicht direkt referenziert werden).

In manchen Fällen ist es aber nicht wünschenswert, alle Methoden in die Binärdatei einzubeziehen. Oft gibt es keinen RTTI-spezifischen Code, der die Methoden zur Laufzeit sucht und aufruft. Mit {$WEAKLINKRTTI ON} unterdrücken Sie das Standardverhalten (alle Methoden in die Binärdatei einbeziehen). Die Direktive $WEAKLINKRTTI wirkt sich nur auf das Linken aus. Sie hat keinen Einfluss auf die Unit-Compilierung. Das ist die einzige Möglichkeit zu steuern, wie viele RTTI-Informationen in der endgültigen ausführbaren Datei erzeugt werden, ohne dass die Original-Units mit geänderten Einstellungen der Direktive $RTTI erneut compiliert werden müssen.


Siehe auch