Hallo zusammen,
vielen Dank für die Anregungen - die Lösung aus dem AutoIT gefällt mir ab besten, da man nicht nur den exakten Vergleich sondern auch kleiner/größer machen könnte.
Ein Naturalcompare wird vermutlich bei diesem Beispiel nicht korrekt funktionieren: 10.6.2 gegen 10.10.2 - da wird die 10.10 als "älter" erkannt, da 1 vor 6 sortiert wird. Oder täusche ich mich jetzt?
Da ich derjenige bin, der das Program compiliert, möchte ich auch gerne die Meldung beim compilieren haben - eine Ausgabe zur Laufzeit (irgendwo in einer
Unit, die man womöglich nicht jedesmal neu durchtestet) könnte man (= ich) übersehen
Ich habe es jetzt mehrere Lösungen, die ich nicht vorenthalten möchte:
Delphi-Quellcode:
{$i IdCompilerDefines.inc}
{$IFNDEF INDY100}
{$MESSAGE Error 'This project must be compiled against Indy 10'}
{$ENDIF}
{$IFNDEF 10_6_2}
{$MESSAGE Error 'This project must be compiled against Indy 10.6.2'}
{$ENDIF}
Wobei ich die Benennung von "10_6_2" unglücklich finde - "INDY10_6_2" wäre wohl besser gewesen, zumal folgende Bedingung nicht funktioniert: {$IF not Defined(INDY100) or not Defined(10_6_2)}
Das ganze macht natürlich nur einen exakten Vergleich - das ist etwas unglücklich, deswegen habe ich das anders gelöst - zuerst habe ich noch Multipliziert, aber dann bitweise verschoben und verknüpft - auch wenn nicht relevant bei heuten CPUs sicherlich die schnellste Lösung:
Delphi-Quellcode:
const
{$i IdVers.inc}
gsIdMinVersionMajor = 10;
gsIdMinVersionMinor = 6;
gsIdMinVersionRelease = 2;
gsIdActualBitwise = ( gsIdVersionMajor
shl 20)
OR ( gsIdVersionMinor
shl 10)
OR gsIdVersionRelease;
gsIdMinimumBitwise = ( gsIdMinVersionMajor
shl 20 )
OR ( gsIdMinVersionMinor
shl 10 )
OR gsIdMinVersionRelease;
{$IF not Declared(gsIdActualBitwise) or ( gsIdActualBitwise < gsIdMinimumBitwise )}
{$MESSAGE Error 'Indy Version is too old.'}
{$IFEND}
Ich hoffe, es hilft irgendwann einmal jemanden
Grüße
Sebastian