[fpc-devel] Does 3.2.3 still support Windows XP ?

Marco van de Voort fpc at pascalprogramming.org
Thu Aug 6 23:09:33 CEST 2026


Op 6-8-2026 om 22:42 schreef Martin Frb via fpc-devel:
>>  _________________
>
> ok, I will check / I was working on windows related stuff. maybe 
> windows slipped into the uses. I guess that would then maybe trigger 
> this (if that unit used gettickcount64).
>
> Or is that API exposed through another unit? 

That message assume it was a static reference. In however 
rtl/win/sysutils.pp there is an attempt to dynamically load it with a 
major version check >=6, so that should fail on win2000/XP/2003 (5.x).

tthread has a static method gettickcount64 that calls 
sysutils.gettickcount64

Lazarus sources call gettickcount64 in many places without explicit 
sysutils prefixes. Then there is a risk that if some unit is (later?) 
changed to import windows on win32/64, it depends on import order which 
version is called.

Good luck:

components/codetools/ide/codyidentifiersdlg.pas:      t := 
GetTickCount64-fStartTime;
components/codetools/ide/codyidentifiersdlg.pas: fStartTime:=GetTickCount64;
components/exampleswindow/ulaz_examples.pas:    //T1 := gettickcount64();
components/exampleswindow/ulaz_examples.pas:    //T2 := gettickcount64();
components/exampleswindow/ulaz_examples.pas:    //T3 := gettickcount64();
components/exampleswindow/ulaz_examples.pas:    //T4 := gettickcount64();
components/exampleswindow/ulaz_examples.pas:    //T5 := gettickcount64();
components/ideintf/idecommands.pas:  if (FDontExecuteUpdateEventsUntil > 
0) and (GetTickCount64 < FDontExecuteUpdateEventsUntil) then
components/ideintf/idecommands.pas:  FDontExecuteUpdateEventsUntil := 
GetTickCount64 + 500;
components/jcf2/ReadWrite/FileConverter.pas:    dwStart := GetTickCount64
components/jcf2/ReadWrite/FileConverter.pas:    dwElapsed := 
GetTickCount64 - dwStart;
components/lazdebuggergdbmi/sshgdbmidebugger.pas:    t2 := GetTickCount64;
components/lazdebuggergdbmi/sshgdbmidebugger.pas:  t := GetTickCount64;
components/lazdebuggergdbmi/test/gdbmitestutils/testbase.pas:  t := 
GetTickCount64;
components/lazdebuggergdbmi/test/gdbmitestutils/testbase.pas: if 
GetTickCount64 - t > ATimeOut then
components/lazdebuggergdbmi/test/gdbmitestutils/testbase.pas: FStartTime 
:= GetTickCount64;
components/lazdebuggergdbmi/test/gdbmitestutils/testbase.pas:  i := 
GetTickCount64;
components/lazdebuggers/lazdebuggerfpdserver/fpdserverdebugger.pas: tc 
:= GetTickCount64;
components/lazdebuggers/lazdebuggerfpdserver/fpdserverdebugger.pas: 
while not terminated and (result='') and ((GetTickCount64-tc)<ATimeout) do
components/lazdebuggers/lazdebuggerfpdserver/fpdserverdebugger.pas:   tc 
:= GetTickCount64;
components/lazdebuggers/lazdebuggerfpdserver/fpdserverdebugger.pas:   
while FDebugProcess.Running and ((GetTickCount64-tc)<5000) and (dw<1) do
components/lazdebuggers/lazdebuggerfpdserver/fpdserverdebugger.pas: tc 
:= GetTickCount64;
components/lazdebuggers/lazdebuggerfpdserver/fpdserverdebugger.pas: 
until (ASendCommand.Validity<>ddsRequested) or ((GetTickCount64-tc)>2000);
components/lazdebuggers/lazdebugtestbase/testdbgtestsuites.pas: 
FTestStartTime := GetTickCount64;
components/lazdebuggers/lazdebugtestbase/testdbgtestsuites.pas: 
LogTime('', GetTickCount64 - FTestStartTime);
components/lazdebuggers/lazdebugtestbase/testdbgtestsuites.pas:  t := 
GetTickCount64;
components/lazdebuggers/lazdebugtestbase/testdbgtestsuites.pas: 
FTestStartTime := FTestStartTime + (GetTickCount64 - t);
components/lazdebuggers/lazdebugtestbase/ttestdbgexecuteables.pas:  t := 
GetTickCount64;
components/lazdebuggers/lazdebugtestbase/ttestdbgexecuteables.pas:    d 
:= GetTickCount64;
components/lazedit/lazeditasyncrunner.pas:  EndTime := GetTickCount64 + 
FTicksPerASyncLoop;
components/lazedit/lazeditasyncrunner.pas:      PerItmTime := 
Max(FTicksPerASyncTask, integer(EndTime - GetTickCount64))
components/lazedit/lazeditasyncrunner.pas:              PerItmTime := 
Max(FTicksPerASyncTask, integer(EndTime - GetTickCount64));
components/lazedit/lazeditasyncrunner.pas:            PerItmTime := 
Max(FTicksPerASyncTask, integer(EndTime - GetTickCount64));
components/lazedit/lazeditasyncrunner.pas:    until (FTasks[p].Count = 
0) or (GetTickCount64 >= EndTime);
components/lazedit/lazeditasyncrunner.pas:    if (GetTickCount64 >= 
EndTime) then break;
components/lazedit/lazedithighlighter.pas:    EndTime := GetTickCount64 
+ AMaxTime;
components/lazedit/lazedithighlighter.pas:       (AMaxTime > 0) and 
(GetTickCount64 >= EndTime)
components/lazedit/lazeditmatchingbracketutils.pas:  EndTime := 
GetTickCount64 + AMaxTime;
components/lazedit/lazeditmatchingbracketutils.pas:    if ((FCurYIdx and 
15) = 0) and (FCallBack <> nil) and (GetTickCount64 > EndTime) then
components/lazedit/lazeditmatchingbracketutils.pas:  EndTime := 
GetTickCount64 + AMaxTime;
components/lazedit/lazeditmatchingbracketutils.pas:    if ((FCurYIdx and 
15) = 0) and (FCallBack <> nil) and (GetTickCount64 > EndTime) then
components/lazutils/lazcollections.pas:    tc := GetTickCount64;
components/lazutils/lazcollections.pas:    ltc := GetTickCount64-tc;
components/lazutils/lazcollections.pas:    tc := GetTickCount64;
components/lazutils/lazcollections.pas:      ltc := GetTickCount64-tc;
components/lazutils/lazloggerprofiling.pas: NamedTimerData[idx].Last := 
GetTickCount64;
components/lazutils/lazloggerprofiling.pas:  t := GetTickCount64;
components/lazutils/lazloggerprofiling.pas:    FTimes[0] := GetTickCount64;
components/lazutils/lazloggerprofiling.pas:  t := GetTickCount64;
components/lazutils/lazloggerprofiling.pas:  FTimes[0] := GetTickCount64;
components/lazutils/lazloggerprofiling.pas:  FTimes[Level] := 
GetTickCount64;
components/lazutils/lazsysutils.pas:function GetTickCount64: QWord;
components/lazutils/lazsysutils.pas:function GetTickCount64: QWord;
components/lazutils/lazsysutils.pas:  Result := SysUtils.GetTickCount64;
components/lazutils/lazvcsutils.pas:        t := GetTickCount64;
components/lazutils/lazvcsutils.pas:            if GetTickCount64 - t > 
30 * 1000 then begin
components/mouseandkeyinput/mouseinputintf.pas:    S := GetTickCount64;
components/mouseandkeyinput/mouseinputintf.pas:    while GetTickCount64 
- S < TimeStep do
components/onlinepackagemanager/opkman_downloader.pas:  FElapsed := 
GetTickCount64 - FStartTime;
components/onlinepackagemanager/opkman_downloader.pas: FStartTime := 
GetTickCount64;
components/onlinepackagemanager/opkman_downloader.pas: FStartTime := 
GetTickCount64;
components/onlinepackagemanager/opkman_updates.pas:    if 
(GetTickCount64 - FTime > FInterval)then
components/onlinepackagemanager/opkman_updates.pas:      FTime := 
GetTickCount64;
components/onlinepackagemanager/opkman_updates.pas:  FTime := 
GetTickCount64;
components/onlinepackagemanager/opkman_zipper.pas:  FStartTime := 
GetTickCount64;
components/onlinepackagemanager/opkman_zipper.pas:  FElapsed := 
GetTickCount64 - FStartTime;
components/packagetabs/packagetabs_impl.pas:  if (GetTickCount64 > 
FLeftClickPopupBlock) then
components/packagetabs/packagetabs_impl.pas: FLeftClickPopupBlock := 
GetTickCount64 + 10;
components/synedit/syneditmarkupfoldcoloring.pas:  t := GetTickCount64;
components/synedit/syneditmarkupfoldcoloring.pas:  DebugLn('*** 
DoTextChanged %d-%d-%d-%d duration=%d', [pStartLine, pEndLine, lEndLine, 
lBottomLine, GetTickCount64 - t]);
components/synedit/synhighlightermulti.pas:    EndTime := GetTickCount64 
+ AMaxTime;
components/synedit/synhighlightermulti.pas:    if (Result >= c) or ( 
(AMaxTime>0) and (GetTickCount64>=EndTime) ) then
components/syneditspellchecker/synspellcheckplugin.pas:  (GetTickCount64 
 > AsyncEndTickTime)
components/tachart/demo/manhattan/Main.pas:  t0 := GetTickCount64;
components/tachart/demo/manhattan/Main.pas:  lblTime.Caption := 
Format('Time:'+LineEnding+'%d ms', [GetTickCount64 - t0]);
components/tachart/taanimatedsource.pas:  d := GetTickCount64 - FStartTime;
components/tachart/taanimatedsource.pas:  FStartTime := GetTickCount64;
components/turbopower_ipro/ipmsg.pas:    IntToHex(GetTickCount64, 8) + 
'-' + IntToHex(Random($FFFF), 4);
Config/onlinepackagemanager/packages/LazMapViewer/examples/flights/main.pas: 
Result := GetTickCount64 - PrevTicks;
Config/onlinepackagemanager/packages/LazMapViewer/examples/flights/main.pas: 
   PrevTicks := GetTickCount64;
Config/onlinepackagemanager/packages/LazMapViewer/source/addons/plugins/markers/uinactivityalarmtimer.pas: 
   FLastActivityTick := GetTickCount64;
Config/onlinepackagemanager/packages/LazMapViewer/source/addons/plugins/markers/uinactivityalarmtimer.pas: 
   FLastActivityTick := GetTickCount64;
Config/onlinepackagemanager/packages/LazMapViewer/source/addons/plugins/markers/uinactivityalarmtimer.pas: 
     t0 := GetTickCount64;
examples/internalcompiler/demointernalcompilerreg.pas: Tick:=GetTickCount64;
examples/internalcompiler/demointernalcompilerreg.pas: while 
GetTickCount64-Tick<100 do ;
examples/virtualtreeview/vst_minimal/Main.pas:    Start := GetTickCount64;
examples/virtualtreeview/vst_minimal/Main.pas:    Label1.Caption := 
Format('Last operation duration: %d ms', [GetTickCount64 - Start]);
examples/virtualtreeview/vst_minimal/Main.pas:    Start := GetTickCount64;
examples/virtualtreeview/vst_minimal/Main.pas:    Label1.Caption := 
Format('Last operation duration: %d ms', [GetTickCount64 - Start]);
ide/comppagespopup.pas:    fLastCloseUp := GetTickCount64;
ide/comppagespopup.pas:  fLastCanShowCheck := not Visible and 
(GetTickCount64 > fLastCloseUp + 100);
ide/packages/ideconfig/exttools.pas: 
DebuglnThreadLog(['TExternalTool.AddOutputLines ',Title,' 
Tick=',IntToStr(GetTickCount64),' Lines=',Lines.Count]);
ide/packages/ideconfig/exttools.pas:  t:=GetTickCount64;
ide/packages/ideconfig/exttools.pas:  until GetTickCount64-t>Timeout;
ide/packages/ideconfig/exttools.pas: LastUpdate:=GetTickCount64;
ide/packages/ideconfig/exttools.pas:        and 
(Abs(int64(GetTickCount64)-LastUpdate)>UpdateTimeDiff) then begin
ide/packages/ideconfig/exttools.pas: 
DebuglnThreadLog(['TExternalToolThread.Execute ',Title,' 
',TimeToStr(Now),' ',IntToStr(GetTickCount64),' AddOutputLines ...']);
ide/packages/ideconfig/exttools.pas: LastUpdate:=GetTickCount64;
ide/packages/idedebugger/test/testwatchresprinter.pas:    tt := 
GetTickCount64; s := TestPrint(BenchMarkIdeRes[0], d); 
Write(GetTickCount64-tt, ' ## ');
ide/packages/idedebugger/test/testwatchresprinter.pas:    tt := 
GetTickCount64; s := TestPrint(BenchMarkIdeRes[0], d); 
Write(GetTickCount64-tt, ' ## ');
ide/packages/idedebugger/test/testwatchresprinter.pas:    tt := 
GetTickCount64; s := TestPrint(BenchMarkIdeRes[0], d); 
Write(GetTickCount64-tt, ' ## ');
ide/packages/idedebugger/test/testwatchresprinter.pas:    tt := 
GetTickCount64; s := TestPrint(BenchMarkIdeRes[0], d); 
Write(GetTickCount64-tt, ' ## ');
ide/packages/idedebugger/test/testwatchresprinter.pas:    tt := 
GetTickCount64; s := TestPrint(BenchMarkIdeRes[1], 
DefaultWatchDisplayFormat); Write(GetTickCount64-tt, ' ## ');
ide/packages/idedebugger/test/testwatchresprinter.pas:    tt := 
GetTickCount64; s := TestPrint(BenchMarkIdeRes[2], 
DefaultWatchDisplayFormat); Write(GetTickCount64-tt, ' ## ');
ide/packages/idedebugger/test/testwatchresprinter.pas:    tt := 
GetTickCount64; s := TestPrint(BenchMarkIdeRes[3], 
DefaultWatchDisplayFormat); Write(GetTickCount64-tt, ' ## ');
lcl/interfaces/gtk3/gtk3widgets.pas:        ' 
',Gtk3EventToStr(event^.type_),' ',GetTickCount64);
lcl/interfaces/gtk3/gtk3widgets.pas:      [GetTickCount64, 
dbgsName(ACtl.LCLObject), AGdkRect^.width, AGdkRect^.height,
lcl/interfaces/gtk3/gtk3widgets.pas:      [GetTickCount64, 
dbgsName(ACtl.LCLObject), AGdkRect^.height, vadj^.upper, vadj^.page_size,
lcl/interfaces/gtk3/gtk3widgets.pas:  DebugLn(['[', GetTickCount64, '] 
Gtk3AppFocusTimerCB: LastFocusIn=nil, AppActive=', Application.Active]);
lcl/interfaces/gtk3/gtk3widgets.pas:      [GetTickCount64, D^.W, D^.H, 
D^.W, D^.H]));
lcl/interfaces/gtk3/gtk3widgets.pas:            [GetTickCount64, 
dbgsName(ACtl.LCLObject), OldShadowW, OldShadowH,
lcl/interfaces/gtk3/gtk3widgets.pas:    if GetTickCount64 >= 
KwinProtectUntil then
lcl/interfaces/gtk3/gtk3widgets.pas:        [GetTickCount64, 
dbgsName(ACtl.LCLObject)]));
lcl/interfaces/gtk3/gtk3widgets.pas:        [GetTickCount64, 
dbgsName(ACtl.LCLObject),
lcl/interfaces/gtk3/gtk3widgets.pas:    [GetTickCount64, 
dbgsName(ACtl.LCLObject), NewSize.cx, NewSize.cy,
lcl/interfaces/gtk3/gtk3widgets.pas:      [GetTickCount64, 
dbgsName(ACtl.LCLObject), SzW, SzH,
lcl/interfaces/gtk3/gtk3widgets.pas:        [GetTickCount64, 
dbgsName(ACtl.LCLObject),
lcl/interfaces/gtk3/gtk3widgets.pas:        [GetTickCount64, 
dbgsName(ACtl.LCLObject),
lcl/interfaces/gtk3/gtk3widgets.pas:    [GetTickCount64, 
dbgsName(ACtl.LCLObject), NewSize.cx, NewSize.cy, Msg.SizeType]));
lcl/interfaces/gtk3/gtk3widgets.pas:      [GetTickCount64, 
dbgsName(ACtl.LCLObject),
lcl/interfaces/gtk3/gtk3widgets.pas:      [GetTickCount64, 
dbgsName(ACtl.LCLObject), ACtl.LCLObject.Width, ACtl.LCLObject.Height,
lcl/interfaces/gtk3/gtk3widgets.pas: 
TGtk3Window(ACtl).FResizeState.LastWSATime := GetTickCount64;
lcl/interfaces/gtk3/gtk3widgets.pas:    [GetTickCount64, 
dbgsName(ACtl.LCLObject), Msg.Width, Msg.Height]));
lcl/interfaces/gtk3/gtk3widgets.pas:      [GetTickCount64, 
dbgsName(ACtl.LCLObject), Msg.Width, Msg.Height,
lcl/interfaces/gtk3/gtk3widgets.pas:      [GetTickCount64, 
dbgsName(ACtl.LCLObject), Msg.Width, Msg.Height,
lcl/interfaces/gtk3/gtk3widgets.pas:    [GetTickCount64, 
dbgsName(ACtl.LCLObject)]));
lcl/interfaces/gtk3/gtk3widgets.pas:  DebugLn(['[', GetTickCount64, '] 
TrackWindowActivate: ', TGtk3Window(Data).LCLObject.ClassName,
lcl/interfaces/gtk3/gtk3widgets.pas:  DebugLn(['[', GetTickCount64, '] 
WindowFocusIn: ', TGtk3Window(AData).LCLObject.ClassName,
lcl/interfaces/gtk3/gtk3widgets.pas:  DebugLn(['[', GetTickCount64, '] 
WindowFocusOut: ', TGtk3Window(AData).LCLObject.ClassName,
lcl/interfaces/gtk3/gtk3widgets.pas:    DebugLn(['[', GetTickCount64, '] 
WindowHideSignal: presetting LastFocusIn to transient parent']);
lcl/interfaces/gtk3/gtk3widgets.pas:    DebugLn(['[', GetTickCount64, '] 
WindowHideSignal: presetting LastFocusIn to MainForm']);
lcl/interfaces/gtk3/gtk3widgets.pas:            [AWidth, AHeight, 
GetTickCount64, BoolToStr(Gtk3WIdgetSet.IsWayland, True)]));
lcl/interfaces/gtk3/gtk3widgets.pas:            [AWidth, AHeight, 
GetTickCount64]));
lcl/interfaces/gtk3/gtk3widgets.pas:          [AWidth, AHeight, 
GetTickCount64,
lcl/interfaces/qt/qtwidgets.pas:    if GetTickCount64 - FLastTick > 10 then
lcl/interfaces/qt/qtwidgets.pas:      FLastTick := GetTickCount64;
lcl/interfaces/qt/qtwidgets.pas:      FLastTick := GetTickCount64;
lcl/interfaces/qt/qtwidgets.pas:  FLastTick := GetTickCount64; // issue 
#22872, #24979
lcl/interfaces/qt/qtx11dummywidget.pas:    ATicks := GetTickCount64;
lcl/interfaces/qt/qtx11dummywidget.pas: writeln('ShowDummyWidget: 
*finished* FRAME=',dbgs(GetWidgetFrame),' in ',GetTickCount64 - ATicks,' 
msec ');
lcl/interfaces/qt5/qtwidgets.pas:    if GetTickCount64 - FLastTick > 10 then
lcl/interfaces/qt5/qtwidgets.pas:      FLastTick := GetTickCount64;
lcl/interfaces/qt5/qtwidgets.pas:      FLastTick := GetTickCount64;
lcl/interfaces/qt5/qtwidgets.pas:  FLastTick := GetTickCount64; // issue 
#22872, #24979
lcl/interfaces/qt5/qtx11dummywidget.pas:    ATicks := GetTickCount64;
lcl/interfaces/qt5/qtx11dummywidget.pas: writeln('ShowDummyWidget: 
*finished* FRAME=',dbgs(GetWidgetFrame),' in ',GetTickCount64 - ATicks,' 
msec ');
lcl/interfaces/qt6/qtwidgets.pas:    if GetTickCount64 - FLastTick > 10 then
lcl/interfaces/qt6/qtwidgets.pas:      FLastTick := GetTickCount64;
lcl/interfaces/qt6/qtwidgets.pas:      FLastTick := GetTickCount64;
lcl/interfaces/qt6/qtwidgets.pas:  FLastTick := GetTickCount64; // issue 
#22872, #24979
lcl/interfaces/qt6/qtx11dummywidget.pas:    ATicks := GetTickCount64;
lcl/interfaces/qt6/qtx11dummywidget.pas: writeln('ShowDummyWidget: 
*finished* FRAME=',dbgs(GetWidgetFrame),' in ',GetTickCount64 - ATicks,' 
msec ');
lcl/lclintf.pas:function GetTickCount64: QWord; inline;
lcl/lclintf.pas:  Result := DWord(LazSysUtils.GetTickCount64());
lcl/lclintf.pas:function GetTickCount64(): QWord;
lcl/lclintf.pas:  Result := LazSysUtils.GetTickCount64();
test/lcltests/testlistview.pas:  t := GetTickCount64;
test/lcltests/testlistview.pas:  while (not 
GotSignalAfterProcessMessages) and (GetTickCount64 - t < 200) do
test/lcltests/testlistview.pas://if not (GetTickCount64 - t < 200) then 
debugln('&&&&&&&&&&&&&&& TimeOut');
test/lcltests/testlistview.pas:  FInput[l].ki.time := GetTickCount64 + l;




More information about the fpc-devel mailing list