读取代码中的文件版本值
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()
。 但是,这样做有一些注意事项:
-
这不是Microsoft官方支持的方法。
-
从
LockResouce()
获取的内存指针不能传递给VerQueryValue()
。您必须分配资源块的副本,然后才能将该副本传递给VerQueryValue()
。 -
但是,您可以使用
VerQueryValue()
从复制的资源块安全查询的唯一版本数据是根VS_FIXEDFILEINFO
结构,它足以获取FileVersion
和ProductVersion
字段。查询任何本地化版本数据都需要通常由GetFileVersionInfo()
执行的修正,甚至与GetFileVersionInfo()
协调VerQueryValue()
自身。
StackOverflow上有几个答案解释了如何使用这种方法,其中一些有代码片段,包括:
https://stackoverflow.com/a/48577200/65863
https://stackoverflow.com/a/13942403/65863
- 我需要分发哪些版本的可再分发文件
- 更新到 2020 年 5 月版本后,无法在 Visual Studio 2019 中创建.exe文件
- 选择特定版本的 Visual Studio 命令行工具包,并根据特定版本的C++运行时环境编译文件
- 检测到 Conan 配置文件设置与 CMake 之间的编译器版本不匹配
- llvm 9在10.15之前的mac版本上支持std::文件系统吗
- 如何在SWIG接口文件中检查Lua版本
- 链接节点本机模块中的提升库,对象文件需要替代库版本
- 如何在运行时对程序创建的.sys文件设置文件版本
- 如何从二进制文件中获取应用程序的版本号?
- 哪些 Netbeans 8.2 项目文件应提交到C++项目的版本控制?
- 读取代码中的文件版本值
- 在h文件上内联发布版本并在cpp上实现调试版本的函数
- 使用 qmake 构建二进制文件的多个版本
- 如何使用 GLFW 预编译的二进制文件编译 Visual Studio 2019 发布版本
- 如何将CSV文件集成到OMNeT++最新版本中?
- 正在加载共享对象:文件中未定义版本Qt_5
- 用静态版本的QT编译时,文件对话框崩溃
- 找不到旧版本Microsoft模块文件
- 提升二进制文件读取错误不支持的版本
- Tcl 文件事件挂在 64 位版本的 Tcl 上