Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Merkwürde Warnings beim Compilieren von Befehlszeile

  Alt 23. Feb 2021, 14:12
Max gibt es nicht als Unsigned (Cardinal/LongWord).

Es wird also nicht das Max mit Integer sondern mit Int64 genommen, weil UInt32 nicht in Int32 rein passt. (Bits ja, aber nicht vom Wertebereich)

Und das Int64-Result vom Max passt dann nicht mehr komplett ins CardinalVariable := rein, also kommt die Meldung. (obwohl es von den verwendeten, bzw. logisch möglichen Werten schon passen würde)
Lösung: ein expliziter Cast  := Cardinal(Max(...))


Und Nein, VAL gibt es ebenfalls nicht "explizit" für Cardinal.
Zitat von Auszug aus der System.pas:
Delphi-Quellcode:
function _ValLong(const S: string; var Code: Integer): Integer;
function _ValExt(s: string; var code: Integer): Extended;
function _ValInt64(const S: string; var Code: Integer): Int64;
function _ValUInt64(const s: string; var code: Integer): UInt64;

Wertest du auch "code" aus?
Wenn nicht, warum verwendest du dann diese "uralten" Pascalfuktionen, anstatt Delphi-Referenz durchsuchenTryStrToInt/TryStrToInt64 bzw. Delphi-Referenz durchsuchenStrToIntDef
oder die neuen Helper ala Delphi-Referenz durchsuchenTCardinalHelper.Parse? (newCardinalValue := Cardinal.Parse('932'); )

Im Delphi-Referenz durchsuchenTStringHelper gibt es zwar auch nur ToInt64 (für Cardinal), also dort ebenfalls mit Cast C := Cardinal('932'.ToInt64); , wie beim StrToInt64.
$2B or not $2B

Geändert von himitsu (23. Feb 2021 um 14:33 Uhr)
  Mit Zitat antworten Zitat