自动 Windows 资源 (*.rc) 版本编辑器






4.33/5 (11投票s)
2003 年 2 月 12 日
3分钟阅读

126776

2172
这个免费软件允许编辑 Windows 资源文件 (*.rc) 并生成一个名为“version.h”的文件,其中包含几个字符串常量 (#define)。它还可以将 RC 文件和 version.h 与 Classbuilder 主头文件同步。
引言
这个免费软件的灵感来自 Srinivas Vaithianathan 在 CodeProject 上托管的一个工具:构建时可执行文件的版本控制。我完全修改了它,现在没有任何代码残留。
几年来,我一直在使用一个很棒的开源工具,名为ClassBuilder。 该工具由 Jimmy Venema 提供,可以在 SourceForge 上找到。
来自 Sourceforge 项目页面
ClassBuilder 是一款面向 C++ 开发人员的免费 CASE 工具,可在 Win95/98/NT 上运行。 它允许您通过图形用户界面在高抽象级别创建、操作和导航类、类关系、类成员和类方法。
ClassBuilder 为每个类生成两个文件(一个 *.cpp 和一个 *.h)以及整个数据模型的主头文件。 主头文件包括所有类的头文件,定义了 typedef
等。 此文件还包含一些符号常量,这些常量会在您生成源代码时自动更新。 根据名为 model 的数据模型,主头文件model.h 将包含
#define MODEL_DATE 20030211 #define MODEL_TIME 193311 #define MODEL_VERSION 12
每次更改接口时,ClassBuilder 都会递增 MODEL_VERSION
并更新 MODEL_DATE
和 MODEL_TIME
。
将数据模型编译为可执行文件或 DLL
要使用数据模型,您应该将其编译为静态库、可执行文件或 DLL。 对于 exe 或 DLL,Visual Studio 会生成一个*.rc 文件。 该文件包含 GUI 定义、图标、光标、位图... 它还应包含二进制文件的版本信息。
以下是 Windows 资源文件中描述RCVersion 本身的版本信息的代码片段。
///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 1, 0, 0, 100 PRODUCTVERSION 1, 0, 0, 1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x9L #else FILEFLAGS 0x8L #endif FILEOS 0x4L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "Modified by BZCToOn's" VALUE "CompanyName", "Syntheretix" VALUE "FileDescription", "rcversion MFC Application" VALUE "FileVersion", "1, 0, 0, 100" VALUE "InternalName", "rcversion" VALUE "LegalCopyright", "Copyleft (C) Bzc ToOn'S 2002" VALUE "OriginalFilename", "rcversion.EXE" VALUE "PrivateBuild", "RCVERSION-20030212_100" VALUE "ProductName", "rcversion Application" VALUE "ProductVersion", "1, 0, 0, 1" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END
RCVersion 是做什么的?
RCVersion 解析主头文件和资源文件。 接下来,根据这两个文件中包含的信息,它会生成一个名为 version.h 的文件并更新资源文件。
输出:version.h
以下是 RCVersion 为自身生成的输出文件。
// Generated by RCVersion 1.0.0.1 build RCVERSION-20030212_100 (20030213-020245) // Copyleft (C) Bzc ToOn'S 2002 // Generated on 13/02/2003 02:02:46 from resource file rcversion.rc #define __SNAPSHOT__ "20030213-020246" #define __FILEVERSION__ "1.0.0.100" #define __PRODUCTVERSION__ "1.0.0.1" #define __COMPANY__ "Syntheretix" #define __PRODUCT__ "rcversion Application" #define __DESCRIPTION__ "rcversion MFC Application" #define __PRIVATEBUILD__ "RCVERSION-20030212_100" #define __COPYRIGHT__ "Copyleft (C) Bzc ToOn'S 2002" // Master Header Values (ClassBuilder)!! #define __CB_DATE__ "20030212" #define __CB_TIME__ "190244" #define __CB_VERSION__ "100" // Do Not Modify !!
命令行执行
rcversion [-q] [-i input]
-q quiet: don't show the UI. Usefull for Custom Build Step in Visual Studio.
-i input: specify the input file. The input file could be *.rc or *.h.
The filename without extension will be used as data model name.
如何在 Visual Studio 中使用 RCVersion
- 将文件添加到项目:version.h
- 定义自定义构建步骤
- 命令行: rcversion -q -i $(TargetName)
- 描述: RCVersion
- 输出: version.h
- 依赖项: $(TargetName).h
- 您现在可以将
#include 'version.h'
放在 $(TargetName).h 或 stdafx.h 中。
不要忘记将 RCVERSION 放在路径中
或
将 Visual Studio 可执行文件路径设置为安装 RCVERSION 的目录
特点
- 从 Classbuilder 主头文件中提取版本号
- RC 文件版本信息编辑器
- version.h 生成
- 可选的 RC 文件更新
- 备份您的旧 version.h 和 RC 文件
- 预览 version.h 和 RC 文件
- 编辑 version.h 和 RC 文件(通过记事本 :-))
- 非交互式执行
错误和限制
我只在我自己的项目上测试了 RCVersion。 对我来说,它运行良好。 我也希望你如此 ;-)。
历史
- RCVERSION-20030212_100
- 首次发布
- RCVERSION-20030214_200
- version.h:添加了
#ifdef _DEBUG / #endif
- version.h:更好的格式
- 为符号常量添加了新字段“符号前缀”
- 添加了新的命令行选项
-p prefix
来设置符号前缀 - 预览控件现在是
RichEdit
控件,以支持固定宽度字体
- version.h:添加了
修复了错误
- RC 文件解析:如果控件 ID 包含
VERSIONINFO
指令之一(FILEVERSION
、PRODUCTVERSION
),则整行将被替换,并且整个 RC 文件将损坏。