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