gpt4 book ai didi

delphi - 如何自动将构建日期转换为代码可见的常量?

转载 作者:行者123 更新时间:2023-12-03 14:34:32 30 4
gpt4 key购买 nike

我想在我的代码中定义一个常量,用于保存可执行文件的构建日期。我自然希望使该过程自动化。

我知道我可以使用 Perl 等编写预构建脚本来写出包含日期的 .inc 文件。我更喜欢使用环境变量或构建变量的更轻量级的解决方案。 msbuild 是否提供了任何有帮助的变量?有谁知道这个问题的更简洁的解决方案吗?

最佳答案

您可以从PE header读取链接器时间戳。可执行文件:

uses
ImageHlp;

function LinkerTimeStamp(const FileName: string): TDateTime; overload;
var
LI: TLoadedImage;
begin
Win32Check(MapAndLoad(PChar(FileName), nil, @LI, False, True));
Result := LI.FileHeader.FileHeader.TimeDateStamp / SecsPerDay + UnixDateDelta;
UnMapAndLoad(@LI);
end;

对于当前模块加载的图像,以下内容似乎有效:

function LinkerTimestamp: TDateTime; overload;
begin
Result := PImageNtHeaders(HInstance + Cardinal(PImageDosHeader(HInstance)^._lfanew))^.FileHeader.TimeDateStamp / SecsPerDay + UnixDateDelta;
end;

早期版本的 Delphi 没有正确更新它,但它已在 Delphi 2010 左右修复。对于早期版本,我使用 IDE plugin编译成功后自动更新。

注意:该值存储为 UTC,因此出于显示目的,您可能需要将其转换为适当的时区。

关于delphi - 如何自动将构建日期转换为代码可见的常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8437300/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com