Aktivieren Sie Delphi XE RTTI nur für einige Klassen

9

Ich versuche RTTI nur für eine Teilmenge meiner Klassen zu aktivieren.

Der Grund ist, dass ich für die Klassen, für die ich RTTI möchte, RTTI auch für öffentliche Methoden verwenden möchte, aber wenn dies projektweit aktiviert ist, werden alle öffentlichen Methoden aus allen Klassen in die endgültige ausführbare Datei aufgenommen. Dies schaltet das Smart-Linking grundsätzlich aus, da der Compiler der Ansicht ist, dass jede öffentliche Methode zur Laufzeit aufgerufen werden kann und somit so ziemlich alles kompiliert wird und die Küche in die ausführbare Datei sinkt ...

Ich habe verschiedene Dinge ausprobiert:

  • Wenn RTTI auf der Projektebene mit {$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])} ausgeschaltet und dann für die relevanten Einheiten wieder aktiviert wird, führt dies bei der $ RTTI-Anweisung zur Kompilierungszeit (ein AV irgendwo im Compiler) zum Absturz.
  • RTTI auf Projektebene ausschalten und dann Klassen-für-Klasse-Kompilierungen aktivieren, aber zur Laufzeit führt dies zu einem unqualifizierten AV tief in "Rtti.pas", wenn versucht wird, auf die RTII für die exponierten Klassen zuzugreifen
  • Die Steuerung von RTTI über $ RTTI-Direktiven, die in die ".inc" -Einheiten aller Einheiten eingebettet sind, führt zu einem zufälligen AV zur Kompilierzeit (immer in der Zeile der $ RTTI-Direktive, aber nicht immer für dieselbe Einheit).

Irgendwelche anderen Ideen?

    
Eric Grange 26.08.2011, 08:16
quelle

1 Antwort

1

Der Compiler-Fehler wurde als QC 98261 für Embarcadero eingereicht.

Die Laufzeit-AV war mit Attributen verbunden. Eine Abhilfe besteht also darin, sicherzustellen, dass die in den exponierten Klassen verwendeten Attribute alle über RTTI für sie verfügen, andernfalls erhalten Sie die nicht qualifizierte Laufzeit-AV .

Der Compiler AV findet immer statt, wenn die $ RTTI-Anweisung verwendet wird vor die "unit" -Anweisung einer Unit, wenn Sie sie platzieren, nachdem AV nicht passiert ist und funktioniert.

    
Eric Grange 30.08.2011, 06:53
quelle

Tags und Links