首页 > 解决方案 > 是否可以从链接的静态库 (.lib) 中知道执行 (.exe) 编译日期

问题描述

我正在开发一个商业静态库,想知道是否有可能找出使用它的 .exe 的编译日期或其他类似信息。

如果这是我的 .exe 文件,我会使用__DATE__宏,但据我所知,宏在预处理期间会扩展,这在我有 .lib 文件时已经完成,因此我将拥有我的 .lib 的日期编译,而不是 .exe。

哪里有别的办法?甚至可能吗?

标签: c++windowsstatic-librariesstatic-linking

解决方案


感谢 Hans Passant 告诉我去哪里看。这是我根据他的评论提出的快速解决方案:

DWORD datePEbuilt = 0;
IMAGE_DOS_HEADER* DosHeader = (IMAGE_DOS_HEADER*) GetModuleHandle(NULL);
if (DosHeader->e_magic == IMAGE_DOS_SIGNATURE)
{
    IMAGE_NT_HEADERS* peHeader = (IMAGE_NT_HEADERS*)((u_char*)DosHeader + DosHeader->e_lfanew);
    if (peHeader->Signature == IMAGE_NT_SIGNATURE)
    {
        datePEbuilt = peHeader->FileHeader.TimeDateStamp;
    }
}

需要一些清理和错误检查,但它适用于 x86 和 x64 版本!


推荐阅读