代码之家  ›  专栏  ›  技术社区  ›  ghiboz

读取代码中的文件版本值

  •  0
  • ghiboz  · 技术社区  · 7 年前

    我在C++中构建的DLL有一个.RC文件,其中包含:

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

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

    谢谢

    1 回复  |  直到 7 年前
        1
  •  2
  •   Remy Lebeau    7 年前

    使用 GetFileVersionInfo() VerQueryValue() 安全的 官方的 读取任何文件版本数据的方法。dll可以通过调用 GetModuleFileName() HINSTANCE 提供给ITS DllMain() 入口点。

    尽管如此,它是 更有效率 为了让dll直接从自己的版本资源中读取版本数据,可以使用 (Find|Load|Lock)Resource() 而不是 获取文件版本信息() . 但是,这样做有一些注意事项:

    • 这不是微软官方支持的方法。

    • 从中获取的内存指针 LockResouce() cannot be passed to VerQueryValue() . 你 必须 分配一个 复制 ,然后您可以通过 复制 VerQueryValue() .

    • 但是,您可以 安全地 来自的查询 复制的 资源块使用 VerQueryValue() 是根 VS_FIXEDFILEINFO 结构,这足以得到 FileVersion ProductVersion 领域。查询任何本地化版本数据需要通常由 获取文件版本信息() 甚至 VerQueryValue() 自身与 获取文件版本信息() .

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

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

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