【发布时间】:2021-10-05 01:50:06
【问题描述】:
我正在使用此代码来捕获可执行文件 (.exe) 的编译日期。我正在寻找一种对 .dll 文件实现相同功能的解决方案。当此代码插入 dll 项目并在某些可执行文件 (.exe) 中注入/或使用导出函数时,检索到的编译日期是可执行文件而不是 dll。
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;
用法:
FormatDateTime('dd/mm/yyyy', GetExeBuildTime);
【问题讨论】:
-
DLL 使用相同的 PE 格式,因此您可以以完全相同的方式找到 DLL 和 EXE 的构建日期
-
请参阅this 以检索 DLL 的路径。
标签: date delphi dll delphi-10.3-rio