在代码中读取 FILEVERSION 值

read FILEVERSION value in code

我用 C++ 构建的 dll 有一个包含以下内容的 .rc 文件:

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,8,7
 PRODUCTVERSION 1,0,8,7

我希望读取 FILEVERSION 值以登录我的代码.. 我能怎么做? 我读了一些东西,但所有的帖子都是相对于阅读其他 dll 或 exe,我需要阅读我当前的 dll

谢谢

使用GetFileVersionInfo()VerQueryValue()安全官方读取任何文件版本数据的方法。 DLL 可以通过使用提供给其 DllMain() 入口点的 HINSTANCE 调用 GetModuleFileName() 来获取自己的路径 + 文件名。

也就是说,对于 DLL 来说,使用 (Find|Load|Lock)Resource() 而不是 GetFileVersionInfo()。但是,这样做有一些注意事项:

  • 这不是微软官方支持的方法。

  • LockResouce()cannot be passed to VerQueryValue()获得的内存指针。您必须分配资源块的副本,然后您可以将副本传递给VerQueryValue().

  • 但是,您可以安全地查询来自已复制资源块的唯一版本数据VerQueryValue() 是根 VS_FIXEDFILEINFO 结构,足以获取 FileVersionProductVersion 字段。查询任何本地化版本数据需要通常由 GetFileVersionInfo() 执行的修复,甚至 VerQueryValue() 本身与 GetFileVersionInfo().

  • 协调

Whosebug 上有几个解释如何使用这种方法的答案,其中一些有代码片段,包括: