У меня была такая проблема с TSystemTime!В Delphi 7 есть проект, который отлично работает!Я перевожу эту программу на Android, поэтому выбор пал на Lazarus, поскольку у него есть возможность программировать под нужную мне платформу.
Когда я начал запускать программу под Android, компилятор начал ругаться на Windows.пас который там используется.Я выполнил это полностью и просто добавил тип, константу, процедуру, функцию, которые мне нужны, к проекту, и тут началось самое интересное ...
Вот часть кода, где ошибки:
function NowUTC: TDateTime;
var
st: TSystemTime;
begin
Uninit(st);
GetSystemTime(st);
result := SystemTimeToDateTime(st); //error
end;
function UtcToLocal(utcTime: TDateTime): TDateTime;
var
st: TSystemTime;
lt: TSystemTime;
begin
DateTimeToSystemTime(utcTime, st); <- error
Uninit(lt);
SystemTimeToTzSpecificLocalTime(nil, st, lt);
result := SystemTimeToDateTime(lt); <- error
end;
function LocalToUTC(localTime: TDateTime): TDateTime;
var
inverseTZ: TTimeZoneInformation;
st: TSystemTime;
ut: TSystemTime;
begin
DateTimeToSystemTime(localTime, st); <- error
Uninit(inverseTZ);
GetTimezoneInformation(inverseTZ);
inverseTZ.Bias := -inverseTZ.Bias;
inverseTZ.DaylightBias := -inverseTZ.DaylightBias;
Uninit(ut);
SystemTimeToTzSpecificLocalTime(@inverseTZ, st, ut);
result := SystemTimeToDateTime(ut); <- error
end;
function UtcDateTimeToFiletime(utcDateTime: TDateTime): TFileTime;
var
st: TSystemTime;
begin
DateTimeToSystemTime(utcDateTime, st); <- error
Uninit(result);
SystemTimeToFileTime(st, result);
end;
function FileTimeToLocalDateTime(const ft: TFileTime): TDateTime;
var
st: TSystemTime;
lft: TFileTime;
begin
Uninit(lft);
FileTimeToLocalFileTime(ft, lft);
Uninit(st);
FileTimeToSystemTime(lft, st);
result := SystemTimeToDateTime(st); <- error
end;
И компилятор показывает такие ошибки:
Error: (4025) Incompatible type for arg no. 1: Got "_SYSTEMTIME", expected "TSystemTime"
Error: (3069) Call by var for arg no. 2 has to match exactly: Got "_SYSTEMTIME" expected "TSystemTime"
Error: (4025) Incompatible type for arg no. 1: Got "_SYSTEMTIME", expected "TSystemTime"
Error: (3069) Call by var for arg no. 2 has to match exactly: Got "_SYSTEMTIME" expected "TSystemTime"
Error: (4025) Incompatible type for arg no. 1: Got "_SYSTEMTIME", expected "TSystemTime"
Error: (3069) Call by var for arg no. 2 has to match exactly: Got "_SYSTEMTIME" expected "TSystemTime"
Error: (4025) Incompatible type for arg no. 1: Got "_SYSTEMTIME", expected "TSystemTime"
Вот тип, который я использую:
{TSystemTime}
{ System time is represented with the following structure: }
PSystemTime = ^TSystemTime;
_SYSTEMTIME = record
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
end;
{$EXTERNALSYM _SYSTEMTIME}
TSystemTime = _SYSTEMTIME;
SYSTEMTIME = _SYSTEMTIME;
{$EXTERNALSYM SYSTEMTIME}
В типе написано, что этоТо же самое (TSystemTime = _SYSTEMTIME) Помогите, пожалуйста, понять.Ну и в добавок может помочь процедура, функция которую я взял из Windows.pas ...
procedure GetSystemTime(var lpSystemTime: TSystemTime); stdcall;
{$EXTERNALSYM GetSystemTime}
procedure GetSystemTimeAsFileTime(var lpSystemTimeAsFileTime: TFileTime); stdcall;
{$EXTERNALSYM GetSystemTimeAsFileTime}
function SetSystemTime(const lpSystemTime: TSystemTime): BOOL; stdcall;
{$EXTERNALSYM SetSystemTime}
procedure GetLocalTime(var lpSystemTime: TSystemTime); stdcall;
{$EXTERNALSYM GetLocalTime}
function SetLocalTime(const lpSystemTime: TSystemTime): BOOL; stdcall;
{$EXTERNALSYM SetLocalTime}
function GetSystemTimeAdjustment(var lpTimeAdjustment, lpTimeIncrement: DWORD;
var lpTimeAdjustmentDisabled: BOOL): BOOL; stdcall;
{$EXTERNALSYM GetSystemTimeAdjustment}
function SystemTimeToTzSpecificLocalTime(lpTimeZoneInformation: PTimeZoneInformation;
var lpUniversalTime, lpLocalTime: TSystemTime): BOOL; stdcall;
{$EXTERNALSYM SystemTimeToTzSpecificLocalTime}
function GetTimeZoneInformation(var lpTimeZoneInformation: TTimeZoneInformation): DWORD; stdcall;
{$EXTERNALSYM GetTimeZoneInformation}
function SetTimeZoneInformation(const lpTimeZoneInformation: TTimeZoneInformation): BOOL; stdcall;
{$EXTERNALSYM SetTimeZoneInformation}
function SystemTimeToFileTime(const lpSystemTime: TSystemTime; var lpFileTime: TFileTime): BOOL; stdcall;
{$EXTERNALSYM SystemTimeToFileTime}
function FileTimeToLocalFileTime(const lpFileTime: TFileTime; var lpLocalFileTime: TFileTime): BOOL; stdcall;
{$EXTERNALSYM FileTimeToLocalFileTime}
function LocalFileTimeToFileTime(const lpLocalFileTime: TFileTime; var lpFileTime: TFileTime): BOOL; stdcall;
{$EXTERNALSYM LocalFileTimeToFileTime}
function FileTimeToSystemTime(const lpFileTime: TFileTime; var lpSystemTime: TSystemTime): BOOL; stdcall;
{$EXTERNALSYM FileTimeToSystemTime}
procedure OutputDebugString(lpOutputString: PChar); stdcall;
{$EXTERNALSYM OutputDebugString}