AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi "Version Compare" / Major/Minorversion Vergleich

"Version Compare" / Major/Minorversion Vergleich

Ein Thema von slemke76 · begonnen am 1. Mär 2018 · letzter Beitrag vom 2. Mär 2018
Antwort Antwort
Seite 2 von 2     12
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
136 Beiträge
 
#11

AW: "Version Compare" / Major/Minorversion Vergleich

  Alt 2. Mär 2018, 12:14
Hallo,

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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.936 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: "Version Compare" / Major/Minorversion Vergleich

  Alt 2. Mär 2018, 12:38
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.944 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: "Version Compare" / Major/Minorversion Vergleich

  Alt 2. Mär 2018, 13:18
{$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))}

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 2. Mär 2018 um 13:22 Uhr)
  Mit Zitat antworten Zitat
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
136 Beiträge
 
#14

AW: "Version Compare" / Major/Minorversion Vergleich

  Alt 2. Mär 2018, 13:23
Hallo,

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:

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

Grüße,
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.944 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: "Version Compare" / Major/Minorversion Vergleich

  Alt 2. Mär 2018, 13:28
OK, das bei Indy ist vorgegeben,

obwohl?
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 2. Mär 2018 um 13:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.944 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: "Version Compare" / Major/Minorversion Vergleich

  Alt 2. Mär 2018, 13:39
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 2. Mär 2018 um 13:41 Uhr)
  Mit Zitat antworten Zitat
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
136 Beiträge
 
#17

AW: "Version Compare" / Major/Minorversion Vergleich

  Alt 2. Mär 2018, 16:04
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
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.839 Beiträge
 
Delphi 2009 Professional
 
#18

AW: "Version Compare" / Major/Minorversion Vergleich

  Alt 2. Mär 2018, 20:05
die Definition von gsIdVersion kommt aus den Indys, da habe ich keinen Einfluss drauf:

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

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.
Michael Justin
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf