0

我在 c++ 中构建的 dll 有一个 .rc 文件,其中包含:

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,8,7
 PRODUCTVERSION 1,0,8,7

我希望读取FILEVERSION值以登录我的代码.. 我该怎么办?我读了一些东西,但是所有的帖子都与阅读其他 dll 或 exe 相关,我需要阅读我当前的 dll

谢谢

4

1 回答 1

3

使用GetFileVersionInfo()andVerQueryValue()是读取任何文件版本数据的安全官方的方式。GetModuleFileName()DLL 可以通过调用提供HINSTANCEDllMain()入口点来获取自己的路径 + 文件名。

话虽如此,DLL 直接从自己的版本资源中读取版本数据,使用(Find|Load|Lock)Resource()不是GetFileVersionInfo(). 但是,这样做有一些注意事项:

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

  • 从中获取的内存指针LockResouce() 无法传递给VerQueryValue(). 您必须分配资源块的副本,然后您可以将副本传递给VerQueryValue().

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

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

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

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

于 2018-06-06T22:58:08.680 回答