![]() |
Re: else ifs werden übersprungen
Zitat:
Wie du um die Teilabfragen herumkommst: Berechne eine Versions-ID so:
Delphi-Quellcode:
Wenn du diese IDs vergleicht, hast du alles, was du über die else-ifs ausdrücken wolltest, implizit dabei.
funtion VersionID(Major, Minor, Release, Build: Word): Int64;
begin Result := Int64(Major) shl 48 or Int64(Minor) shl 32 or Release shl 16 or Build; end; |
Re: else ifs werden übersprungen
Das Kernproblem lässt sich auch auf einen Integervergleich reduzieren:
Delphi-Quellcode:
Kein Teil darf dann über 255 hinausgehen. (Aber Versionen wie 3.260.70.577 sind ja eher selten)
function MakeVersion(major, minor, release, build:byte):Cardinal;
begin result := (major shl 24) or (minor shl 16) or (release shl 8) or build; end; if MakeVersion(ReadInteger('Version', 'Major', 0), ....) > MakeVersion(Major, Minor, ...) then Avaiable; Sollte dies ein Problem sein, dann macht man eben einen Fliesskommazahlvergleich:
Delphi-Quellcode:
function MakeVersion(major, minor, release, build:integer):Double;
begin result := (((major * 10000.0) + minor) * 10000.0 +release)*10000.0 + build; end; |
Re: else ifs werden übersprungen
Sory, hatte in meinem Beitrag eine dazugehörige Prozedur vergessen. Habe den Beitrag nochmal editiert.
|
Re: else ifs werden übersprungen
Zitat:
Zitat:
Ich habe das so gemacht:
Delphi-Quellcode:
if (ReadInteger('Version', 'Major', 0) >= Major) and (ReadInteger('Version', 'Minor', 0) >= Minor) and (ReadInteger('Version', 'Release', 0) >= Release) and (ReadInteger('Version', 'Build', 0) > Build) then
|
Re: else ifs werden übersprungen
Hallo Fabian,
angenommen, ich arbeite mit Version 1.0.0.42, und die .ini-Datei kündigt Version 2.0.0.0 an. Mit deinem Code aus Beitrag #1 erhalte ich ein Update, mit deinem neuen Code aus Beitrag #14 nicht mehr. Und das nur, weil die Build-Nummer der neuen Version nicht hoch genug ist... Gruß Hawkeye |
Re: else ifs werden übersprungen
Zitat:
Oder anders gesagt: weil 10A + B > 10C + D das selbe ist wie (A > B and C >= D) or (A >= B and C > D) - was sich auf beliebig viele Stellen erweitern lässt ;) Edit: unter der Vorraussetzung, dass A, B, C, D die eigenen Versionszahlen sind und E, F, G, H die auf dem Server, könnte dein Vergleich auch einfach not (A <= E and B <= F and C <= G and D <= H) sein. |
Re: else ifs werden übersprungen
Hi Hawkeye219 :)
Mist ^^ ich habe beim letzten Vergleich das = vergessen :) OOPs Zitat:
|
Re: else ifs werden übersprungen
Oben genannter Code enthält Fehler, obwohl er auf den ersten Blick richtig erscheinen mag - unser Code enthält keine Fehler, weil es gegen die Axiome der Mathematik verstieße ;)
shmias Code ist aber, zugegebenermaßen, fehleranfällig als der, den ich gepostet habe, gerade weil Build-Zahlen manchmal schon über die Byte-Grenze hinauswachen. |
Re: else ifs werden übersprungen
entweder du machst 'n INT vergleich wie DAX und shmia sagten, oder du hängst 'ne build Nr. hinten an, welche über deine versionen ständig heraufgezählt wird und frägst auf diese ab... projekt -- >optionen --> versionsinfo --> buildnummer
dann sieht deine versionsnummer so aus 1.5.2.368 und die nächst version z.b. so 2.1.13.428 in deiner ersten version, haste auf alle fälle den >= vergleich vergessen... grüsse und noch viel erfolg |
Re: else ifs werden übersprungen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 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