gpt4 book ai didi

c++ - 在 C++ 中以编程方式从 DLL 中获取 DLL 版本 - 再次

转载 作者:行者123 更新时间:2023-11-27 22:57:18 24 4
gpt4 key购买 nike

尝试了 MSDN 论坛的答案和线程中提到的答案 - How do I programmatically get the version of a DLL or EXE file? - 但我总是得到版本号为“0.0.0.0”

右键单击我的 DLL -> 属性 -> 详细信息 -> 文件版本具有正确的值。加载我的 DLL 的 EXE 没有版本信息 - 但不确定这是否重要。

我的代码在下面(作为 dll 的一部分)->

   std::string moduleName     = "<full absolute path to DLL that this code is part of>";
DWORD zero = 0;
uint32 verInfoLen = 0;
BYTE *verInfo = NULL;
VS_FIXEDFILEINFO *fileInfo = NULL;
uint32 len = 0;

/* Get the size of FileVersionInfo structure */
verInfoLen = GetFileVersionInfoSize(moduleName.c_str(), &zero);
if (verInfoLen == 0) {
printf("GetFileVersionInfoSize() Failed!");
return;
}

/* Get FileVersionInfo structure */
verInfo = new BYTE[verInfoLen];
if (!GetFileVersionInfo(moduleName.c_str(), zero, verInfoLen, verInfo)) {
printf("GetFileVersionInfo Failed!");
return;
}

/* Query for File version details. */
if (!VerQueryValue(verInfo, "\\", (LPVOID *)&fileInfo, &len)) {
printf("VerQueryValue Failed!");
return;
}

/* None of the above func calls fail - but both printf below print all zeros */
printf("Version is %d.%d.%d.%d",
(fileInfo->dwProductVersionMS >> 16) & 0xff,
(fileInfo->dwProductVersionMS >> 0) & 0xff,
(fileInfo->dwProductVersionLS >> 16) & 0xff,
(fileInfo->dwProductVersionLS >> 0) & 0xff);

printf("Version is %d.%d.%d.%d",
HIWORD(fileInfo->dwProductVersionMS),
LOWORD(fileInfo->dwProductVersionMS),
HIWORD(fileInfo->dwProductVersionLS),
LOWORD(fileInfo->dwProductVersionLS));

感谢任何帮助!

最佳答案

当您应该打印出 FileVersion 字段时,您正在打印出 ProductVersion 字段:

printf("Version is %d.%d.%d.%d",
HIWORD(fileInfo->dwFileVersionMS),
LOWORD(fileInfo->dwFileVersionMS),
HIWORD(fileInfo->dwFileVersionLS),
LOWORD(fileInfo->dwFileVersionLS));

此外,如果 GetFileVersionInfo()VerQueryValue() 失败,您的代码将泄漏 verInfo 数组。

关于c++ - 在 C++ 中以编程方式从 DLL 中获取 DLL 版本 - 再次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31572659/

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