// http://codereview.stackexchange.com/questions/110819/delphi-convenience-wrapper-for-getsystemtimepreciseasfiletime unit UTestGSTAFT_v1; interface uses {$ifdef VER150} Windows {$else} WinAPI.Windows {$endif}; procedure zw_GetSystemTimeAsFileTime (var ft: TFileTime); stdcall; implementation procedure GSTAFT_AutoInit_ (var ft: TFileTime); stdcall; forward; type TGetSystemTimeAsFileTime = procedure (var ft: TFileTime); stdcall; var GetSystemTimeAsFileTime_: TGetSystemTimeAsFileTime = GSTAFT_AutoInit_; procedure zw_GetSystemTimeAsFileTime (var ft: TFileTime); stdcall; begin GetSystemTimeAsFileTime_(ft); end; {$ifdef VER150} function InterlockedCompareExchangePointer (var dst: Pointer; new_val, cmp_val: Pointer): Pointer; stdcall; external kernel32 name 'InterlockedCompareExchange'; {$endif} procedure GSTAFT_AutoInit_ (var ft: TFileTime); stdcall; var fp: TFarProc; begin fp := GetProcAddress(GetModuleHandle('kernel32'), 'GetSystemTimePreciseAsFileTime'); if fp = nil then fp := @GetSystemTimeAsFileTime; InterlockedCompareExchangePointer(Pointer(@GetSystemTimeAsFileTime_), fp, @GSTAFT_AutoInit_); GetSystemTimeAsFileTime_(ft); end; end.