[英]Getting DLL Version from within the DLL Programmatically in C++ - Again
尝试了MSDN论坛的答案和线程中提到的答案- 如何以编程方式获取DLL或EXE文件的版本? -但我总是得到版本号为“ 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
数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.