【发布时间】:2009-10-02 01:04:34
【问题描述】:
是否有一些预处理器关键字可用于在编译时访问我的 .rc 文件中定义的 FILEVERSION?
我真的不想添加额外的代码来从编译产品本身读取文件信息。
【问题讨论】:
标签: c++ visual-c++ versioning
是否有一些预处理器关键字可用于在编译时访问我的 .rc 文件中定义的 FILEVERSION?
我真的不想添加额外的代码来从编译产品本身读取文件信息。
【问题讨论】:
标签: c++ visual-c++ versioning
预处理器也在 .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;
【讨论】:
#include "foo.h" 将不再存在。这不是好的解决方案。
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.. .
我对这个问题的解决方案很简单,效果很好,不会被资源编辑器抹杀。 1. 将整个 VS_VERSION_INFO 部分移动到您的 .RC2 文件中。 2. 将所有版本号和字符串替换为您在新 version.h 文件中#define 的值。 3. 将#include "version.h" 添加到您的 .RC2 文件中。 现在您还可以在其他 .CPP 文件中包含 version.h 并在代码中使用 #define 值,例如在对话框中显示应用的版本资源。
【讨论】: