在代码中读取FILEVERSION值

时间:2018-06-06 21:06:49

标签: c++ visual-studio-2015 fileversioninfo

我在c ++中构建的dll有一个.rc文件,其中包含:

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

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

感谢

1 个答案:

答案 0 :(得分:2)

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

话虽如此,使用(Find|Load|Lock)Resource()代替GetFileVersionInfo(),DLL直接从其自己的版本资源中读取版本数据更高效。但是,这样做有一些警告:

  • 这不是Microsoft官方支持的方法。

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

    < / LI>
  • 但是,使用VerQueryValue()复制的资源块中安全地查询的唯一版本数据是根VS_FIXEDFILEINFO结构,足以获得FileVersionProductVersion字段。查询任何本地化版本数据都需要通常由GetFileVersionInfo()执行的修正,甚至VerQueryValue()本身与GetFileVersionInfo()协调。

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

https://stackoverflow.com/a/48577200/65863

https://stackoverflow.com/a/13942403/65863