![]() |
Delphi-Version: 10.4 Sydney
F9 misslingt
Hi zusammen
Ich hab hier ein älteres Projekt, das nicht mehr startet. Die Fehlermeldung: Zitat:
Delphi-Quellcode:
Doppelklick auf die Fehlermeldung setzt den Cursor vor das End;
function GetDelphiCompilerVersion: RawUTF8;
begin result := {$IFDEF FPC} 'Free Pascal' {$IFDEF VER2_6_4} + ' 2.6.4'{$ENDIF} {$IFDEF VER3_0_0} + ' 3.0.0'{$ENDIF} {$IFDEF VER3_0_1} + ' 3.0.1'{$ENDIF} {$IFDEF VER3_0_2} + ' 3.0.2'{$ENDIF} {$IFDEF VER3_1_1} + ' 3.1.1'{$ENDIF} {$IFDEF FPC_HAS_MANAGEMENT_OPERATORS} + ' MOP'{$ENDIF} {$ELSE} {$IFDEF VER130} 'Delphi 5'{$ENDIF} {$IFDEF CONDITIONALEXPRESSIONS} // Delphi 6 or newer {$IF defined(KYLIX3)}'Kylix 3' {$ELSEIF defined(VER140)}'Delphi 6' ... ... {$ELSEIF defined(VER330)}'Delphi 10.3 Carnival' {$IFEND} {$ENDIF CONDITIONALEXPRESSIONS} {$ENDIF} {$IFDEF CPU64} + ' 64 bit' {$ENDIF} end; Die ersten Zeilen der Unit:
Delphi-Quellcode:
Ich habe die Unit nie angefasst.
/// common functions used by most Synopse projects
/// - this unit is a part of the freeware Synopse mORMot framework, /// licensed under a MPL/GPL/LGPL tri-license; version 1.18 unit SynCommons; {$I Synopse.inc} /// define HASINLINE USETYPEINFO CPU32 CPU64 OWNNORMTOUPPER interface Gruss Delbor |
AW: F9 misslingt
Ich bin jetzt nicht durch die ganzen verschachtelten IFDEFs durchgegangen, aber da fehlt wohl Sydney noch in der Liste, deshalb wird Result nichts zugewiesen.
|
AW: F9 misslingt
Zitat:
![]() Bis bald... Thomas |
AW: F9 misslingt
Leider machen viele Entwickler den gleichen Fehler:
Es wird nur auf bekannte Delphiversionen geprüft, aber neue unbekannte Versionen werden vollkommen vergessen. Sinnvoll ist bei solchen Versionsprüfungen immer, dass man davon ausgeht, dass es sich um eine neuere Version handelt, wenn die bereits bekannten Direktiven nicht vorhanden sind. In diesem Fall könnte man z.B. 'Neuer als Delphi 10.3" schreiben. Meistens geht es aber um die Prüfung, ob man etwas auf die eine oder andere Weise machen muss, weil sich bei neueren Versionen etwas geändert hat bzw. erst dann verfügbar ist. Auch dann wäre es sinnvoll von einer neueren Version auszugehen und alles so zu machen wie für die höchste bekannte Version. Ein Beispiel dafür ist meine Definition hier: ![]() Diese Komponenten funktionieren mit 10.4 ganz normal weiter, weil zwar zu dem Zeitpunkt nur 10.3 Rio bekannt war, es aber als Delphi10RioUp erkannt wird... |
AW: F9 misslingt
Ich bin nicht so sehr vertraut mit all diesen {$If...}, habe aber mal versucht mich da durchzubeißen.
Wenn keines der {SIF..} zutrifft, dann steht da m.E.nur noch
Delphi-Quellcode:
und das führt dann zu dem Fehler.
begin
result := end; Ich habe mal folgende Zeilen hinzugefügt Hinter {$ELSEIF defined(VER330)}'Delphi 10.3 Carnival'
Delphi-Quellcode:
.
{$ELSE} 'Unbekannte Version'
vor {$ENDIF CONDITIONALEXPRESSIONS}
Delphi-Quellcode:
.
{$ELSE} 'Keine CONDITIONALEXPRESSIONS'
Das sieht dann so aus (und funktioniert bei mir) Den Typ des Results von GetDelphiCompilerVersion habe ich auf String geändert, weil mein Delphi RawUTF8 nicht mag.
Delphi-Quellcode:
function GetDelphiCompilerVersion:String;
begin result := {$IFDEF FPC} 'Free Pascal' {$IFDEF VER2_6_4} + ' 2.6.4'{$ENDIF} {$IFDEF VER3_0_0} + ' 3.0.0'{$ENDIF} {$IFDEF VER3_0_1} + ' 3.0.1'{$ENDIF} {$IFDEF VER3_0_2} + ' 3.0.2'{$ENDIF} {$IFDEF VER3_1_1} + ' 3.1.1'{$ENDIF} {$IFDEF FPC_HAS_MANAGEMENT_OPERATORS} + ' MOP'{$ENDIF} {$ELSE} {$IFDEF VER130} 'Delphi 5'{$ENDIF} {$IFDEF CONDITIONALEXPRESSIONS} // Delphi 6 or newer {$IF defined(KYLIX3)}'Kylix 3' {$ELSEIF defined(VER140)}'Delphi 6' {$ELSEIF defined(VER330)}'Delphi 10.3 Carnival' {$ELSE} 'Unbekannte Version' // Hinzugefügt {$IFEND} {$ELSE} 'Keine CONDITIONALEXPRESSIONS' // Hinzugefügt {$ENDIF CONDITIONALEXPRESSIONS} {$ENDIF} {$IFDEF CPU64} + ' 64 bit' {$ENDIF} end; |
AW: F9 misslingt
Hi DeddyH
Guten Morgen! Vielen Dank für deine prompte Antwort! Gruss Delbor |
AW: F9 misslingt
Hi zusammen
Meine derzeitige Lösung:
Delphi-Quellcode:
Erstmal hat es mich doch etwas verblüfft, wie einfach das ging - kein suchen nach irgendwelchen Versionsnummern und verwenden des Originalnamens. Meines Wissens war Carnival der Entwicklungsname für Rio. Denjenigen für Sydney hätte ich erst suchen müssen.
{$ELSEIF defined(VER320)}'Delphi 10.2 Tokyo'
{$ELSEIF defined(VER330)}'Delphi 10.3 Carnival' {$ELSEIF defined(VER340)}'Delphi 10.4 Sydney' {$IFEND} {$ENDIF CONDITIONALEXPRESSIONS} {$ENDIF} {$IFDEF CPU64} + ' 64 bit' {$ENDIF} end; [QUOTE=mytbo;1491801] Zitat:
Gruss Delbor |
AW: F9 misslingt
Und wenn dann eine neue Version erscheint, hast du wieder das gleiche Problem.
Wie jaenicke in #4 schrieb Zitat:
Ein Beispiel habe ich in #5 gezeigt. |
AW: F9 misslingt
Zitat:
...:cat:... |
AW: F9 misslingt
* garnichts zu machen und den Nutzer grob fahrlässig in einen "nichtsagenden" Fehler rennen zu lassen
* oder einfach nur "unbemerkt" ein 'unbekannt' zurückzugeben * oder stattdessen den Compiler gezielt mit einem
Delphi-Quellcode:
bzw.
{$Message Error 'zu alt, hol dir was Neues'}
Delphi-Quellcode:
abzuwürgen
{$Message Fatal ...
ist ein kleiner Unterschied |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 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 by Thomas Breitkreuz