繁体   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