To follow Andreas Rejbrand idea posted as comment, I would suggest this:
function StrToCardinal(const S : String) : Cardinal;
var
I64 : UInt64;
begin
I64 := StrToUInt64(S);
if (I64 shr 32) <> 0 then
raise EConvertError.Create('StrToCardinal invalid value');
Result := Cardinal(I64);
end;
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…