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:
{$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. Irgendwelche anderen Ideen?
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.