Вопрос, поднятый Kas Ob., связан с необходимостью эмуляции 64-битной версии функции GetTickCount для 32-битных систем. Эта функция стандартного API Windows предоставляет время в миллисекундах, прошедшее с момента запуска системы, и важна для программ, требующих точных временных меток. В 64-битных версиях Windows функция GetTickCount64 уже включена, но для старых 32-битных систем, таких как Windows XP или Server 2003, она недоступна.
Проблема
Kas Ob. предложил эмулировать GetTickCount64 для 32-битных систем, используя внутреннее представление времени, доступное в пространстве адресов ядра Windows. Однако, из-за ограниченного доступа к 32-битным системам, работающим более 49.7 дней, возникла необходимость в тестировании эмулятора на таких системах.
Решение
Remy Lebeau указал на исторические изменения в API, связанные с переходом от 32-битного к 64-битному счетчику времени. Он также отметил, что эмуляция GetTickCount64 может быть полезна для старых систем, но функциональность, доступная в Vista и выше, делает это менее актуальным.
Альтернативное решение
aehimself успешно запустил эмулятор на 32-битной системе Windows Server 2003 R2, которая работала более 61 дня, и получил корректный результат, подтверждающий работоспособность эмуляции.
Пример кода
program Project1;
{$APPTYPE CONSOLE}
uses
System.SysUtils;
function GetTickCount64Emu: UInt64;
const
KUSER_BASE_ADDRESS = $7FFE0000;
begin
Result := (PUInt64(KUSER_BASE_ADDRESS + $320) * PCardinal(KUSER_BASE_ADDRESS + $4)) shr 24;
end;
begin
try
WriteLn(GetTickCount64Emu);
ReadLn;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Заключение
Эмуляция GetTickCount64 для 32-битных систем возможна, и пример выше демонстрирует, что такая эмуляция может быть успешно реализована и протестирована. Это решение позволяет использовать единый подход для программ, работающих на различных версиях Windows, и может быть полезно для старых систем, где обновление операционной системы невозможно или нежелательно.
Выводы для SEO
Статья предназначена для специалистов в области разработки ПО на Delphi и Pascal, и оптимизирована для поисковых запросов, связанных с эмуляцией GetTickCount64 для 32-битных систем. Использование Object Pascal кода и технических терминов, таких как эмуляция, GetTickCount64, 32-битные и 64-битные системы, поможет улучшить релевантность статьи для целевой аудитории.
Эмуляция функции GetTickCount64 для 32-битных систем рассматривается как способ обеспечения совместимости программного обеспечения с различными версиями операционной системы Windows, особенно важно для систем, где обновление до 64-битной версии невозможно
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.