在代码中读取 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
结构,足以获取 FileVersion
和 ProductVersion
字段。查询任何本地化版本数据需要通常由 GetFileVersionInfo()
执行的修复,甚至 VerQueryValue()
本身与 GetFileVersionInfo()
.
协调
Whosebug 上有几个解释如何使用这种方法的答案,其中一些有代码片段,包括:
我用 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 toVerQueryValue()
获得的内存指针。您必须分配资源块的副本,然后您可以将副本传递给VerQueryValue()
.但是,您可以安全地查询来自已复制资源块的唯一版本数据
VerQueryValue()
是根VS_FIXEDFILEINFO
结构,足以获取FileVersion
和ProductVersion
字段。查询任何本地化版本数据需要通常由GetFileVersionInfo()
执行的修复,甚至VerQueryValue()
本身与GetFileVersionInfo()
. 协调
Whosebug 上有几个解释如何使用这种方法的答案,其中一些有代码片段,包括: