Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi "Version Compare" / Major/Minorversion Vergleich (https://www.delphipraxis.net/195457-version-compare-major-minorversion-vergleich.html)

slemke76 2. Mär 2018 11:14

AW: "Version Compare" / Major/Minorversion Vergleich
 
Hallo,

Zitat:

Zitat von Uwe Raabe (Beitrag 1395044)
Delphi-Quellcode:
{$IF (gsIdVersionMajor <> 10) or (gsIdVersionMinor <> 6) or (gsIdVersionRelease <> 2) or (gsIdVersionBuild <> 0)}
{$MESSAGE Fatal 'Falsche Indy-Version!'}
{$ENDIF}

Beim Update der Komponente auf eine neuere Version muss ich das anpassen, bei meiner Lösung nicht, da ist es ein Minimum- und kein Exaktes Requirement.

Grüße
Sebastian

Uwe Raabe 2. Mär 2018 11:38

AW: "Version Compare" / Major/Minorversion Vergleich
 
Zitat:

Zitat von slemke76 (Beitrag 1395047)
Beim Update der Komponente auf eine neuere Version muss ich das anpassen, bei meiner Lösung nicht, da ist es ein Minimum- und kein Exaktes Requirement.

Das mit dem "mindestens" hatte ich übersehen.

himitsu 2. Mär 2018 12:18

AW: "Version Compare" / Major/Minorversion Vergleich
 
Delphi-Quellcode:
{$IF (gsIdVersionMajor > 10) or ((gsIdVersionMajor = 10) and (gsIdVersionMinor > 6)) or ((gsIdVersionMajor = 10) and (gsIdVersionMinor = 6) and (gsIdVersionRelease > 2)) or ((gsIdVersionMajor = 10) and (gsIdVersionMinor = 6) and (gsIdVersionRelease = 2) and (gsIdVersionBuild >= 0))}
:stupid:

Nja, es gibt mehrere Varianten für das Gleiche.
Delphi-Quellcode:
gsIdVersion = '10.06.02.01'; // 00-09 mit führender 0 oder Leerzeichen, aber besser die 0
{$IF gsIdVersion >= '10.02.00.00'}
{$IF gsIdVersion >= '10.00.00.00'}

gsIdVersion = 10060201;
{$IF gsIdVersion >= 10020000}
{$IF gsIdVersion >= 10000000}

gsIdVersion = 10.060201;
{$IF gsIdVersion >= 10.02}
{$IF gsIdVersion >= 10}
Meistens interessieren Einen nur die erste oder die ersten beiden Stellen (Major und Minor),
da ist dann das Letztere halt einfacher/verständlicher.

Nachteil bei all diesen Dingen: Die subversionen dürfen nur Werte von 0 bis 99 haben.
Bei String darfs der Major auch nur 0 bis 99, aber dei den Numerischen kann es auch größer/kleiner sein.

slemke76 2. Mär 2018 12:23

AW: "Version Compare" / Major/Minorversion Vergleich
 
Hallo,

Zitat:

Zitat von Uwe Raabe (Beitrag 1395049)
Das mit dem "mindestens" hatte ich übersehen.

Alles gut, ich freue mich über das viele Feedback ;-)

@himitsu:
Ich sehe das tatsächlich in diesem Falle nicht ganz, die Definition von gsIdVersion kommt aus den Indys, da habe ich keinen Einfluss drauf:

Delphi-Quellcode:
gsIdVersion = '10.6.2.0'; {do not localize}
und da fehlen bei der Minorversion und dem Release die führende "0".

Grüße,
Sebastian

himitsu 2. Mär 2018 12:28

AW: "Version Compare" / Major/Minorversion Vergleich
 
OK, das bei Indy ist vorgegeben,

obwohl? :stupid:
Delphi-Quellcode:
const gsIdVersionNum = gsIdVersionMajor + (gsIdVersionMinor / 100) + (gsIdVersionRelease / 10000) + (gsIdVersionBuild / 1000000);
// oder
const gsIdVersionNum = (gsIdVersionMajor * 1000000) + (gsIdVersionMinor * 10000) + (gsIdVersionRelease * 100) + gsIdVersionBuild;

Es ging mehr allgemein um Aufbau/Verwendung von Versionnummern im Quelltext, speziell in Compiler-Direktiven, wo keine aufwändigen Stringvergleiche möglich sind.
Die String-Version von Indy kann wirklich nicht für einen Vergleich verwendet werden, also größer oder kleiner (außer auf Gleichheit).
Außer gsIdVersionMinor/gsIdVersionRelease/gsIdVersionBuild sind niemals größer als 9.

himitsu 2. Mär 2018 12:39

AW: "Version Compare" / Major/Minorversion Vergleich
 
Vorallem das Build ist ofrmals größer als 99. (viele Projekte zählen das seit Beginn kontinuierlich hoch)
In den Versionskonstanten stehen daher oftmals nur die ersten zwei oder drei Nummern. (mehr ist auch fast nie nötig)

PS: Und die VersionsInfo-Records im Windows bestehen aus WORDs.
word.word.word.word
00000000000000000000
00000.000000000000000
'00000.00000.00000.00000'

In der Versionsresource gibt es neben den beiden RECORDS (in der .RC ein String mit festem Format) auch nochmal zusätzlich die Versionen als "freier" String.

slemke76 2. Mär 2018 15:04

AW: "Version Compare" / Major/Minorversion Vergleich
 
Zitat:

Zitat von himitsu (Beitrag 1395056)
Es ging mehr allgemein um Aufbau/Verwendung von Versionnummern im Quelltext, speziell in Compiler-Direktiven, wo keine aufwändigen Stringvergleiche möglich sind.

Stimmt, ich hatte den speziellen Indy Fall im Blick. So hat sich aber ein prima Thread entwickelt, der vielleicht auch anderen noch mal weiterhelfen kann ;-)

Grüße
Sebastian

mjustin 2. Mär 2018 19:05

AW: "Version Compare" / Major/Minorversion Vergleich
 
Zitat:

Zitat von slemke76 (Beitrag 1395055)
die Definition von gsIdVersion kommt aus den Indys, da habe ich keinen Einfluss drauf:

Delphi-Quellcode:
gsIdVersion = '10.6.2.0'; {do not localize}

Lädt man den Indy Daily Build von indy.fulgan.com, sieht die Zeile anders aus: die IdVers.Inc enthält dort immer auch die Buildnummer. Im Subversion Repo hat sie immer den Wert 0.
Zum Beispiel in der aktuellen Indy10_5448.zip

Delphi-Quellcode:
gsIdVersion = '10.6.2.5448'; {do not localize}
Praktisch bedeutet dass, dass man Major/Minor und Release sicher vergleichen kann. Bei der Buildnummer kommt es darauf, an 'woher' die Indy Version kommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz