![]() |
AW: Delphi-Version ermitteln
![]() nee, gibt paktisch nur die drei System.RTLVersion System.CompilerVersion FMX.Types.FireMonkeyVersion ABER :freak: ![]() |
AW: Delphi-Version ermitteln
Zitat:
|
AW: Delphi-Version ermitteln
Die HPPEMIT sind ja nur für den C++Builder, nicht für Delphi.
Der C++Builder kann ja Delphi-Units benutzen ... wäre zu geil, wenn man auch im Delphi direkt C++-Header/Code linken könnte. :cry: Zitat:
Delphi-Quellcode:
und
{$IF Declared(...)}
Delphi-Quellcode:
rumpfuschen.
{$IF Defined(...)} bzw. {$IFDEF ...}
Declared geht z.B. für Konstanten, Variablen, Typen/Klassen und Funktionen, also auf Etwas, was da neu/entfernt/verschoben wurde. |
AW: Delphi-Version ermitteln
Zitat:
Die Frage ist doch eher: Warum will man das wissen? |
AW: Delphi-Version ermitteln
Zitat:
Auch wenn der Compiler nicht geändert wurde von 11.2 auf 11.3 gibt es ja schon Anpassungen/Änderungen die Auswirkung auf meine Anwendung haben. Oder war das "Warum will man das wissen?" an himitsu und seinem c++ Thema gerichtet? :-D |
AW: Delphi-Version ermitteln
Ja, es wäe schön, wenn es einfach ginge, mit nur einer Compiler/Delphi-VersionsInformationsKonstante, inkl. Version, Subversion/Update und womöglich auch Patch und Hotfix,
aber wenn das nicht geht, dann muß man eben selber auf irgendwas Anderes prüfen. Es gibt ja für Vieles mehrere Wege:
Delphi-Quellcode:
OK, etwas "Lesbares" wäre auch mal zu geil. :cry:
{$IF CompilerVersion >= 20.0} // oder so ein perverser {$IFDEF VER123}-Marathon, der aber nur für alte/bekannte Versionen funktioniert und "neue" Delphis noch nicht kennt
{$IF Declared(UnicodeString)} {$IF SizeOf(Char) = 2} {$IFDEF UNICODE}
Delphi-Quellcode:
Aber sowas kann eigentlich NIE funktionieren, es sei denn der Compiler würde sich online eine aktuelle Versionsliste besorgen können,
{$IF (DelphiVersion >= 'XE') and (DelphiVersion <= '11.2')}
{$IF (DelphiVersion >= 'XEu2') and (DelphiVersion <= '10.1.2')} denn ein älterer Compiler kennt neue Delphis noch nicht und weiß z.B. somit nicht dass XE zwar größer als 7 ist, aber kleiner als 10 ist, wenn er die 10 noch nicht kennt. Wenn Delphi bei den aktuellen Zahlen bleiben würde und Zahlen immer nur größer werden, dann wäre es einfacher, aber wer weiß ob nicht doch irgendwann wieder sowas wie "XE" kommt. |
AW: Delphi-Version ermitteln
Delphi-Quellcode:
unit System.Defines;
interface const RTLVersion11Alexandria = 35.0; RTLVersion104Sydney = 34.0; RTLVersion103Rio = 33.0; RTLVersion102Tokyo = 32.0; RTLVersion101Berlin = 31.0; RTLVersion10Seattle = 30.0; RTLVersionXE8 = 29.0; RTLVersionXE7 = 28.0; RTLVersionXE6 = 27.0; RTLVersionXE5 = 26.0; RTLVersionXE4 = 25.0; RTLVersionXE3 = 24.0; RTLVersionXE2 = 23.0; RTLVersionXE = 22.0; RTLVersion2010 = 21.0; RTLVersion2009 = 20.0; RTLVersion2007Net = 19.0; RTLVersion2007 = 18.5; RTLVersion2006 = 18.0; RTLVersion2005 = 17.0; RTLVersion8Net = 16.0; RTLVersion7 = 15.0; const CompilerVersion11Alexandria = 35.0; CompilerVersion104Sydney = 34.0; CompilerVersion103Rio = 33.0; CompilerVersion102Tokyo = 32.0; CompilerVersion101Berlin = 31.0; CompilerVersion10Seattle = 30.0; CompilerVersionXE8 = 29.0; CompilerVersionXE7 = 28.0; CompilerVersionXE6 = 27.0; CompilerVersionXE5 = 26.0; CompilerVersionXE4 = 25.0; CompilerVersionXE3 = 24.0; CompilerVersionXE2 = 23.0; CompilerVersionXE = 22.0; CompilerVersion2010 = 21.0; CompilerVersion2009 = 20.0; CompilerVersion2007 = 18.5; CompilerVersion2006 = 18.0; CompilerVersion2005 = 17.0; CompilerVersion8Net = 16.0; CompilerVersion7 = 15.0; implementation end. |
AW: Delphi-Version ermitteln
Alten Code mit alter DefinesUnit/INC/Sonstwas in zu neuem Delphi/Compiler und schon knallt es gern mal. (siehe das Beispiel mit der JEDI-INC)
OK, wenn diese Defines zum Code passt, dann isses schon OK. Man darf beim Rumschreiben für ein neues Delphi nur nicht vergessen diese Unit zu aktialisieren. Aber gerade sowas war ja das Problem, z.B. mit der Versions-INC von den JEDI. Ein neues Delphi und schon war sowas wie
Delphi-Quellcode:
plötzlich undefiniert, weil das Gerödel mit
{$IFDEF DelphiXEorGreater}
Delphi-Quellcode:
plötzlich endete und es das neue VER789 nicht kannte.
{$IFDEF VER132}
Ähnlich wie beim RTLVersion113, wo die RTLVersion112, RTLVersion112 und RTLVersion111 weiter existieren, hätte der Compiler sowas wie die VERxxx-Defines auch aufheben können (also Delphi 11 hat die Define vom 10 und allen Vorhängern drin) ... aber egal, dank CompilerVersion und z.B. >= geht es auch ohne. Es wäre nur einfacher, wenn es eben "eine" Konstante gäbe, anstatt den vielen RTLVersionXXX. Willst du einen Bugfix für genau 11.3 schreiben, dann Zitat:
und hoffen der nächste Bugfix heißt wirklich Declared(RTLVersion114) oder es wird ein Delphi 12, aber wehe es wird eine RTLVersion113b oder RTLVersion1132 oder ... (Delphi 11.3.2) Mit
Delphi-Quellcode:
wurde es dann besser, seit den ConditionalDefines, gegenüber dem alten
{$IF CompilerVersion > 123}
Delphi-Quellcode:
,
{$IFDEF VER132}
aber jetzt mit RTLVersion112 wurde es wieder schlimmer. (und da das RTLVersion112 ja eigentlich vom Compiler kommen könnte, hätte man es auch als DEFINE deklarieren können, aber als CONST wird es wenigstens über UnitGrenzen durchgereicht) |
AW: Delphi-Version ermitteln
Zitat:
Delphi-Quellcode:
{$IF CompilerVersion > 35}
Du musst diese Unit anpassen! {$IFEND} |
AW: Delphi-Version ermitteln
Drum meinte ich ja, dass es mit CompilerVersion schon besser wurde, da man damit auch auf zukünftige Delphis prüfen kann (nicht direkt auf eine bestimmte noch unbekannte Version, aber auf Alles >= dem letzten Aktuellen),
ohne ALLE bereits bekannten Versionen prüfen zu müssen (sonst weiß man ja nicht, ob älter oder neue, bzw. vergessen zu prüfen). Aber mit solchem Mist wie RTLVersion113 wurde das alles wieder zur Minna gemacht und rutsch logisch zurück ins Grauen der alten VERxxx-Defines. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz