簡體   English   中英

在C ++中以編程方式從DLL中獲取DLL版本-再次

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM