PROCEDURE TForm4.TestShlWAPIStrToInt64Ex(Sender : TObject);
VAR numstr : STRING;
VAR wcharnumstr : WideString;
VAR flags : DWORD;
VAR number : TLargeInteger;
VAR apiretval : BOOL;
VAR newinfoline : STRING;
BEGIN
numstr := '';
wcharnumstr := '';
flags := 0; //(= STIF_DEFAULT = $00000000;);
FillChar(number, SizeOf(number), #0);
apiretval := FALSE;
newinfoline := '';
numstr := '440000000000';
//flags := STIF_DEFAULT; //= 0, set in var initialization
apiretval := StrToInt64Ex(PChar(numstr), flags, @number);
newinfoline := 'StrToInt64Ex called with "' + numstr + '" returned : ';
IF apiretval = TRUE THEN
newinfoline := newinfoline + 'TRUE, '
ELSE
newinfoline := newinfoline + 'FALSE, ';
newinfoline := newinfoline + IntToStr(number) + ' (0x' + IntToHex(number, 16) + ')';
Memo1.Lines.Add(newinfoline);
number := 0;
apiretval := FALSE;
numstr := '370,100,200,300'; //US/English thousands sepaators
//flags := STIF_DEFAULT; //= 0, set in var initialization
apiretval := StrToInt64Ex(PChar(numstr), flags, @number);
newinfoline := 'StrToInt64Ex called with "' + numstr + '" returned : ';
IF apiretval = TRUE THEN
newinfoline := newinfoline + 'TRUE, '
ELSE
newinfoline := newinfoline + 'FALSE, ';
newinfoline := newinfoline + IntToStr(number) + ' (0x' + IntToHex(number, 16) + ')';
Memo1.Lines.Add(newinfoline);
number := 0;
apiretval := FALSE;
numstr := '420.300.200.100'; //European thousands sepaators
//flags := STIF_DEFAULT; //= 0, set in var initialization
apiretval := StrToInt64Ex(PChar(numstr), flags, @number);
newinfoline := 'StrToInt64Ex called with "' + numstr + '" returned : ';
IF apiretval = TRUE THEN
newinfoline := newinfoline + 'TRUE, '
ELSE
newinfoline := newinfoline + 'FALSE, ';
newinfoline := newinfoline + IntToStr(number) + ' (0x' + IntToHex(number, 16) + ')';
Memo1.Lines.Add(newinfoline);
number := 0;
apiretval := FALSE;
numstr := ' 120300200100'; //Leading blank/space
//flags := STIF_DEFAULT; //= 0, set in var initialization
apiretval := StrToInt64Ex(PChar(numstr), flags, @number);
newinfoline := 'StrToInt64Ex called with "' + numstr + '" returned : ';
IF apiretval = TRUE THEN
newinfoline := newinfoline + 'TRUE, '
ELSE
newinfoline := newinfoline + 'FALSE, ';
newinfoline := newinfoline + IntToStr(number) + ' (0x' + IntToHex(number, 16) + ')';
Memo1.Lines.Add(newinfoline);
number := 0;
apiretval := FALSE;
numstr := '-560000123000'; //Negative number, no hex notation
//flags := STIF_DEFAULT; //= 0, set in var initialization
apiretval := StrToInt64Ex(PChar(numstr), flags, @number);
newinfoline := 'StrToInt64Ex called with "' + numstr + '" returned : ';
IF apiretval = TRUE THEN
newinfoline := newinfoline + 'TRUE, '
ELSE
newinfoline := newinfoline + 'FALSE, ';
newinfoline := newinfoline + IntToStr(number) + ' (0x' + IntToHex(number, 16) + ')';
Memo1.Lines.Add(newinfoline);
number := 0;
apiretval := FALSE;
numstr := '-870000321000'; //Negative number, but hex notation permissible
flags := 1; //(= STIF_SUPPORT_HEX = $00000001;);
apiretval := StrToInt64Ex(PChar(numstr), flags, @number);
newinfoline := 'StrToInt64Ex called with "' + numstr + '" returned : ';
IF apiretval = TRUE THEN
newinfoline := newinfoline + 'TRUE, '
ELSE
newinfoline := newinfoline + 'FALSE, ';
newinfoline := newinfoline + IntToStr(number) + ' (0x' + IntToHex(number, 16) + ')';
Memo1.Lines.Add(newinfoline);
number := 0;
apiretval := FALSE;
numstr := '0x6FAB0000ECECECEC'; //Valid hex notation
flags := 1; //(= STIF_SUPPORT_HEX = $00000001;);
apiretval := StrToInt64Ex(PChar(numstr), flags, @number);
newinfoline := 'StrToInt64Ex called with "' + numstr + '" returned : ';
IF apiretval = TRUE THEN
newinfoline := newinfoline + 'TRUE, '
ELSE
newinfoline := newinfoline + 'FALSE, ';
newinfoline := newinfoline + IntToStr(number) + ' (0x' + IntToHex(number, 16) + ')';
Memo1.Lines.Add(newinfoline);
number := 0;
apiretval := FALSE;
numstr := '-0x9CAB0000EABFDCBA'; //"Negative" hex number
flags := 1; //(= STIF_SUPPORT_HEX = $00000001;);
apiretval := StrToInt64Ex(PChar(numstr), flags, @number);
newinfoline := 'StrToInt64Ex called with "' + numstr + '" returned : ';
IF apiretval = TRUE THEN
newinfoline := newinfoline + 'TRUE, '
ELSE
newinfoline := newinfoline + 'FALSE, ';
newinfoline := newinfoline + IntToStr(number) + ' (0x' + IntToHex(number, 16) + ')';
Memo1.Lines.Add(newinfoline);
number := 0;
apiretval := FALSE;
numstr := ' 0X75d300002F4aB9c1A'; //Two /2) leading blanks and upper case X in hex prefix
flags := 1; //(= STIF_SUPPORT_HEX = $00000001;);
apiretval := StrToInt64Ex(PChar(numstr), flags, @number);
newinfoline := 'StrToInt64Ex called with "' + numstr + '" returned : ';
IF apiretval = TRUE THEN
newinfoline := newinfoline + 'TRUE, '
ELSE
newinfoline := newinfoline + 'FALSE, ';
newinfoline := newinfoline + IntToStr(number) + ' (0x' + IntToHex(number, 16) + ')';
Memo1.Lines.Add(newinfoline);
number := 0;
apiretval := FALSE;
numstr := ' +12955376'; //Leading space, plus sign, and invalid pointer to Int64 variable
flags := STIF_DEFAULT; //(= STIF_DEFAULT = $00000000;);
apiretval := StrToInt64Ex(PChar(numstr), flags, NIL);
newinfoline := 'StrToInt64Ex called with "' + numstr + '" returned : ';
IF apiretval = TRUE THEN
newinfoline := newinfoline + 'TRUE, '
ELSE
newinfoline := newinfoline + 'FALSE, ';
newinfoline := newinfoline + IntToStr(number) + ' (0x' + IntToHex(number, 16) + ')';
Memo1.Lines.Add(newinfoline);
number := 0;
apiretval := FALSE;
//Wide character/Unicode version
wcharnumstr := '$F4d7'; //Pascal hex prefix and invalid pointer to Int64 variable
numstr := wcharnumstr;
flags := 1; //(= STIF_SUPPORT_HEX = $00000001;);
apiretval := StrToInt64ExW(PWChar(wcharnumstr), flags, NIL);
newinfoline := 'StrToInt64Ex called with "' + numstr + '" returned : ';
IF apiretval = TRUE THEN
newinfoline := newinfoline + 'TRUE, '
ELSE
newinfoline := newinfoline + 'FALSE, ';
newinfoline := newinfoline + IntToStr(number) + ' (0x' + IntToHex(number, 16) + ')';
Memo1.Lines.Add(newinfoline);
number := 0;
apiretval := FALSE;
Memo1.Lines.Add('');
END; |
StrToInt64Ex called with "440000000000" returned : TRUE, 440000000000 (0x00000066720B3000)
StrToInt64Ex called with "370,100,200,300" returned : TRUE, 370 (0x0000000000000172)
StrToInt64Ex called with "420.300.200.100" returned : TRUE, 420 (0x00000000000001A4)
StrToInt64Ex called with " 120300200100" returned : TRUE, 120300200100 (0x0000001C027360A4)
StrToInt64Ex called with "-560000123000" returned : TRUE, -560000123000 (0xFFFFFF7D9D643F88)
StrToInt64Ex called with "-870000321000" returned : TRUE, -870000321000 (0xFFFFFF356FF09E18)
StrToInt64Ex called with "0x6FAB0000ECECECEC" returned : TRUE, 8046525163202473196 (0x6FAB0000ECECECEC)
StrToInt64Ex called with "-0x9CAB0000EABFDCBA" returned : TRUE, -7157627178836828998 (0x9CAB0000EABFDCBA)
StrToInt64Ex called with " 0X75d300002F4aB9c1A" returned : TRUE, 6714867057104231450 (0x5D300002F4AB9C1A)
StrToInt64Ex called with " +12955376" returned : TRUE, 0 (0x0000000000000000)
StrToInt64Ex called with "$F4d7" returned : FALSE, 0 (0x0000000000000000) |