Directive WEAKLINKRTTI (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Liste des directives de compilation Delphi - Index

Type

Commutateur

Syntaxe

{$WEAKLINKRTTI ON} ou {$WEAKLINKRTTI OFF}

Par défaut

{$WEAKLINKRTTI OFF}

Portée

Locale


Remarques

Normalement, toutes les méthodes qui peuvent être accédées et invoquées grâce au RTTI étendu doivent être compilées dans le binaire. Soit l'exemple suivant :

var
  LContext: TRttiContext;
  LType: TRttiType;
begin
  { Create a new RTTI context }
  LContext := TRttiContext.Create();

  { Obtain the TRttiType for a given TSomeClass class }
  LType := LContext.GetType(TSomeClass);
 
  { Invoke the method called SomeMethod in the class }
  LType.GetMethod('SomeMethod').Invoke(['FirstParameter', 2]);
end;

Dans l'exemple précédent, une méthode SomeMethod est invoquée dynamiquement. Il n'y a pas de référence à la liaison à SomeMethod, de telle sorte que le processus de liaison normal ne devrait pas l'inclure dans le binaire. Ainsi, le code utilisant RTTI devrait échouer lors de l'appel de la méthode qui n'existe pas. Dans notre exemple, TSomeClass a le RTTI étendu, de telle sorte que le lieur inclut toutes les méthodes dans le binaire (même celles non référencées directement).

Cependant, dans certains cas, il n'est pas souhaitable d'inclure toutes les méthodes dans le binaire. Dans la plupart des cas, il n'existe pas de code compatible RTTI qui trouve et invoque les méthodes à l'exécution. Utilisez {$WEAKLINKRTTI ON} pour supprimer le comportement par défaut d'inclusion de toutes les méthodes dans le binaire. La directive $WEAKLINKRTTI affecte seulement la liaison. Elle n'affecte pas la compilation des unités. C'est la seule façon de contrôler combien d'informations RTTI sont générées dans l'exécutable final sans recompiler les unités originales avec différents paramètres pour la directive $RTTI.


Voir aussi