【问题标题】:Getting FILEVERSION from Visual C++ Resource File从 Visual C++ 资源文件中获取 FILEVERSION
【发布时间】:2009-10-02 01:04:34
【问题描述】:

是否有一些预处理器关键字可用于在编译时访问我的 .rc 文件中定义的 FILEVERSION?

我真的不想添加额外的代码来从编译产品本身读取文件信息。

【问题讨论】:

    标签: c++ visual-c++ versioning


    【解决方案1】:

    预处理器也在 .RC 文件上运行。在 .RC 和您的源代码都包含的标头中定义共享数据。

    即在 foo.h:

    #define MY_PRODUCT_NAME Foo
    

    然后在 foo.rc:

    #include "foo.h"
    
    VS_VERSION_INFO VERSIONINFO
       // Many lines omitted
       VALUE "ProductName", MY_PRODUCT_NAME
    

    然后在 foo.cpp:

    #include "foo.h"
    
    cout << MY_PRODUCT_NAME;
    

    【讨论】:

    • 好主意,但在 RC 文件中,它有一个字符串信息块,其中也有版本信息(格式略有不同)。有什么方法可以简单地访问 RC 文件值而不是重新定义它们并将它们保存在一个公共位置?
    • 我不知道 - rc.exe 独立于 cl.exe。
    • 当您更改对话框或正在使用的任何内容时,会生成新的 .rc 文件并覆盖旧文件。所以这个#include "foo.h" 将不再存在。这不是好的解决方案。
    • @LihO - 我不明白你在说什么 - 修改对话框会更改 .rc 文件但对 foo.h 没有影响,因此不会导致版本资源发生变化生成或 C++ 文件使用的定义。
    • 1.使用一个对话框创建新的 MFC 应用程序。 2.使用以下正文创建新标题foo.h#ifndef __FOO_H__ #define __FOO_H__ #define MY_VERSION "1.1.0.0" #endif 3.在 textinclude 中写入"#include ""foo.h""\r\n",以便即使您更改对话框也会生成此行 4.将文件版本的行更改为VALUE "FileVersion", MY_VERSION 5.构建解决方案,看看它有多好用 6. 更改对话框 - 将 ListBox 或其他任何东西放在那里 7. 重建解决方案,看看 VALUE "FileVersion", MY_VERSION 是如何被重写为 VALUE "FileVersion", "1.1.0.0" 8. 如果你现在更改 foo.h,它不会影响 .rc.. .
    【解决方案2】:

    我对这个问题的解决方案很简单,效果很好,不会被资源编辑器抹杀。 1. 将整个 VS_VERSION_INFO 部分移动到您的 .RC2 文件中。 2. 将所有版本号和字符串替换为您在新 version.h 文件中#define 的值。 3. 将#include "version.h" 添加到您的 .RC2 文件中。 现在您还可以在其他 .CPP 文件中包含 version.h 并在代码中使用 #define 值,例如在对话框中显示应用的版本资源。

    【讨论】:

    猜你喜欢
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2011-08-04
    相关资源
    最近更新 更多