Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как получить дату компиляции динамически подключаемой библиотеки (.dll) в Delphi?

Delphi , Файловая система , DLL и PlugIns

При разработке программ на языке Delphi иногда возникает потребность узнать дату компиляции исполняемых файлов или динамически подключаемых библиотек (.dll). В случае с исполняемыми файлами (.exe) задача решается довольно просто, но с библиотеками (.dll) могут возникнуть определенные трудности. В данной статье мы рассмотрим, как можно получить дату компиляции .dll файла, используя возможности Delphi.

Проблема

Исходный код, предоставленный в контексте, позволяет получить дату компиляции исполняемого файла (.exe). Однако, при использовании этого кода в проекте динамически подключаемой библиотеки (.dll) и его последующем использовании в исполняемом файле (.exe), возвращается дата компиляции самого исполняемого файла, а не библиотеки.

function GetExeBuildTime: TDateTime;
var
  LI: TLoadedImage;
{$IF CompilerVersion > 26.0}
  m: TMarshaller;
{$IFEND}
  timeStamp: Cardinal;
  utcTime: TDateTime;
begin
{$IF CompilerVersion > 26.0}
  Win32Check(MapAndLoad(PAnsiChar(m.AsAnsi(ParamStr(0)).ToPointer), nil, @LI,
    False, True));
{$ELSE}
  Win32Check(MapAndLoad(PAnsiChar(AnsiString(ParamStr(0))), nil, @LI,
    False, True));
{$IFEND}
  timeStamp := LI.FileHeader.FileHeader.TimeDateStamp;
  UnMapAndLoad(@LI);
  utcTime := UnixToDateTime(timeStamp);
  Result := TTimeZone.local.ToLocalTime(utcTime);
end;

Решение

Динамически подключаемые библиотеки (.dll) используют тот же формат файлов, что и исполняемые файлы (.exe), поэтому для получения даты компиляции можно использовать тот же подход. Необходимо передать в функцию путь к файлу .dll, а не к исполняемому файлу, как это делается в исходном коде.

Вот модифицированная версия функции, которая принимает путь к файлу в качестве параметра:

function GetDllBuildTime(DllPath: String): TDateTime;
var
  LI: TLoadedImage;
{$IF CompilerVersion > 26.0}
  m: TMarshaller;
{$IFEND}
  timeStamp: Cardinal;
  utcTime: TDateTime;
begin
{$IF CompilerVersion > 26.0}
  Win32Check(MapAndLoad(PAnsiChar(m.AsAnsi(DllPath).ToPointer), nil, @LI,
    False, True));
{$ELSE}
  Win32Check(MapAndLoad(PAnsiChar(AnsiString(DllPath)), nil, @LI,
    False, True));
{$IFEND}
  timeStamp := LI.FileHeader.FileHeader.TimeDateStamp;
  UnMapAndLoad(@LI);
  utcTime := UnixToDateTime(timeStamp);
  Result := TTimeZone.local.ToLocalTime(utcTime);
end;

Пример использования

Чтобы использовать функцию GetDllBuildTime, передайте в нее путь к файлу .dll, и функция вернет дату компиляции библиотеки в локальном времени:

var
  BuildTime: TDateTime;
begin
  BuildTime := GetDllBuildTime('C:\Path\To\YourDll.dll');
  ShowMessage(FormatDateTime('dd/mm/yyyy hh:nn:ss', BuildTime));
end;

Альтернативный ответ

Не требуется, так как предоставленный в контексте код не содержит информации, которая бы требовала альтернативного решения.

Заключение

В данной статье мы рассмотрели, как получить дату компиляции динамически подключаемой библиотеки (.dll) в Delphi, используя модификацию исходного кода функции, предназначенной для работы с исполняемыми файлами (.exe). Представленные изменения позволяют корректно обрабатывать файлы .dll и возвращать дату их компиляции.

Создано по материалам из источника по ссылке.

Контекст запроса связан с тем, как получить дату компиляции динамически подключаемой библиотеки (.dll) в среде разработки Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DLL и PlugIns ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 10:54:42/0.0033669471740723/0