#pragma explicit_rtti

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Pragma-Direktiven (Übersicht) - Index


Syntax (siehe Pseudogrammatik)

#pragma explicit_rtti [VISIBILITY-CLAUSE]
VISIBILITY-CLAUSE := methods | properties | fields (VISIBILITY-EXPR)
VISIBILITY-EXPR := [__published], [public], [protected], [private]

Beschreibung

Mit #pragma explicit_rtti können Sie den Umfang der RTTI-Informationen steuern, die für Klassen und Records im Delphi-Stil erzeugt werden. Sie können explizit Member-Arten (Methoden, Felder usw.) mit spezieller Sichtbarkeit (public, protected usw.) angeben, für die RTTI-Informationen erzeugt werden sollen.

Eine #pragma explicit_rtti-Spezifikation ist für den Rest der Datei für alle nachfolgend vorkommenden Deklarationen von Klassen-Membern oder so lange gültig, bis durch eine andere #pragma explicit_rtti-Spezifikation die Einstellungen geändert werden.

Die Member-Arten (Methoden, Felder und Eigenschaften) können in beliebiger Reihenfolge angegeben werden. Das Argument für jede Spezifikation der Member-Art muss eine durch Komma getrennte Liste einer Kombination von Folgendem sein:

  • __published
  • public
  • protected
  • private

Wenn die Liste, wie die folgende, leer ist:

 #pragma explicit_rtti methods()

dann erhält kein Member dieser Art RTTI-Informationen. Ist eine Member-Art nicht angegeben (wie Eigenschaften und Felder in dem Beispiel), dann wird die aktuelle Einstellung beibehalten.

Voreinstellung

Die Voreinstellung ist:

 #pragma explicit_rtti methods (__published, public) properties (__published, public) fields(__published, public, protected, private)

In der folgenden Tabelle werden die Details dieser Einstellung dargestellt:

Member-Sichtbarkeit
Member-Art
__published public protected private
Methoden + +    
Eigenschaften + +    
Felder + + + +

Die Member-Liste kann auch, wie in dem folgenden Beispiel, als Präprozessormakro definiert werden:

 #define VIS_ANY __published, public, protected, private
 #define VIS_NONE
 #pragma explicit_rtti methods(VIS_ANY) properties(VIS_NONE)

Verwenden von #pragma explicit_rtti mit LiveBindings

LiveBindings verwenden vom Delphi-Compiler für in Delphi geschriebene Klassen und Typen erzeugte RTTI (Laufzeit-Typinformationen). In einer C++-Anwendung mit ausschließlich in Delphi geschriebenen Klassen und Typen muss #pragma explicit_rtti nicht verwendet werden. Dies gilt auch für alle Standard-VCL- oder FMX-Klassen, wie TForm, TButton, TMemo usw. Diese VCL- oder FMX-Klassen und Typen sind in Delphi geschrieben und verfügen bereits über vom Delphi-Compiler erzeugte RTTI-Informationen.

  • Für LiveBindings in C++-Anwendungen mit Delphi-ähnlichen Klassen oder Typen, die Sie in C++ geschrieben haben, müssen Sie die Direktive #pragma explicit_rtti methods() verwenden.
  • Für LiveBindings in C++-Anwendungen mit Klassen oder Typen, die Sie in Delphi (wie VCL- oder FMX-Klassen und -Typen) geschrieben sind, sollten Sie die Direktive #pragma explicit_rtti methods() nicht verwenden.

Siehe auch