[英]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.