读取代码中的文件版本值

read FILEVERSION value in code

本文关键字:版本 文件 取代码 读取      更新时间:2023-10-16

我在 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()。 但是,这样做有一些注意事项:

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

  • LockResouce()获取的内存指针不能传递给VerQueryValue()您必须分配资源块的副本,然后才能将该副本传递给VerQueryValue()

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

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

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

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