我在c ++中构建的dll有一个.rc文件,其中包含:
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,8,7
PRODUCTVERSION 1,0,8,7
我希望读取FILEVERSION
值以登录我的代码..
我能怎么做?
我读了一些东西,但所有帖子都是相对于读取其他dll或exe,我需要阅读我当前的dll
感谢
答案 0 :(得分:2)
使用GetFileVersionInfo()
和VerQueryValue()
是安全和官方方式来读取任何文件的版本数据。 DLL可以通过调用GetModuleFileName()
并将HINSTANCE
提供给其DllMain()
入口点来获取自己的路径+文件名。
话虽如此,使用(Find|Load|Lock)Resource()
代替GetFileVersionInfo()
,DLL直接从其自己的版本资源中读取版本数据更高效。但是,这样做有一些警告:
这不是Microsoft官方支持的方法。
从LockResouce()
cannot be passed to VerQueryValue()
获取的内存指针。您必须分配资源块的副本,然后您可以将副本传递给VerQueryValue()
。
但是,使用VerQueryValue()
从复制的资源块中安全地查询的唯一版本数据是根VS_FIXEDFILEINFO
结构,足以获得FileVersion
和ProductVersion
字段。查询任何本地化版本数据都需要通常由GetFileVersionInfo()
执行的修正,甚至VerQueryValue()
本身与GetFileVersionInfo()
协调。
StackOverflow上有几个答案解释了如何使用这种方法,其中一些有代码片段,包括: