VC使用编译时间作为版本号标识的方法

发布时间 - 2026-01-11 00:09:21    点击率:

常用方法分两步:

1. 得到编译时间;

2. 设置基准时间,以编译时间距基准时间的总天数的2倍作为版本号,适当情况还可加上初值;

其中第一步实现有两种方法:

1. 直接使用系统宏:CString OcxTime = __DATE__;
2. 在编译选项的Pre-link Step中调用批处理文件.bat:

@echo off
echo #pragma once>"Ver.h"
echo #define APP_VER_NUM  "%data%">>"Ver.h"

其它网友的补充

使用宏__DATE__和__TIME__

CString strVersion,strBuildTime; 
strBuildTime = __DATE__; 
strBuildTime.Append(" "); 
strBuildTime.Append(__TIME__); 
COleVariant vtime(strBuildTime); 
vtime.ChangeType(VT_DATE); 
COleDateTime dateTime=vtime; 
SYSTEMTIME systime; 
VariantTimeToSystemTime(dateTime, &systime); 
CTime buildTime(systime); 
strVersion = buildTime.Format(" Builded %Y-%m-%d %H:%M:%S "); 

it一梦同学的补充

一般来说,发布的正式软件都会包含程序的svn版本号以及软件的编译版本和编译时间等信息,但是这些东西并不是默认就存在的,需要我们进行一些步骤的处理。具体做法有几种,万变不离其宗的是,利用SVN自带的指令获取到版本号以及当前时间,填充模板当中的占位符,最后用替换后的模板覆盖资源文件即可。这里只讲最简单的一种:
a. 首先需要给VC程序添加资源文件,假设程序名为Test,则资源文件为Test.rc
b. 向资源文件中添加新的资源项——version,资源文件用记事本打开,增加了如下代码:

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "080404b0"
    BEGIN
      VALUE "FileDescription", "Test"
      VALUE "FileVersion", "1, 1, 1, 0"
      VALUE "InternalName", "Test"
      VALUE "LegalCopyright", "Copyright (C) 2015"
      VALUE "OriginalFilename", "Test.exe"
      VALUE "ProductName", "Microsoft"
      VALUE "ProductVersion", "V1.0"
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x804, 1200
  END
END

c. 接下来创建一个模板,利用SVN提供的占位符WCREV获取版本号,WCNOW获取编译时间。模板可以直接复制Test.rc文件,更名为Test.rc2。修改上述代码中的ProductVersion的值即可:

VALUE "ProductVersion", "V2.1.1.$WCREV$.(Build$WCNOW$)"

d. 那么何时进行占位符的替换,随后替换程序的资源文件Test.rc,准确的将版本号与编译时间编译进程序呢?VS提供了一个Build Events配置,我们选择Pre-Build Event,增加一行代码如下:

SubWCRev $(ProjectDir) $(ProjectDir)\Test.rc2 $(ProjectDir)\Test.rc

代码的意思是在程序编译之前,用SVN的脚本工具SubWCRev获取到工程目录的SVN号以及当前的编译时间,替换rc2文件中的占位符,覆盖到rc文件中。


# 编译时间  # 版本号  # 的是  # 是在  # 万变不离其宗  # 可以直接  # 几种  # 还可  # 自带  # 有两种  # 最简单  # 创建一个  # 增加了  # 具体做法  # 只讲  # 批处理文件  # 分两步  # 更名为  # Append  # strBuildTime  # COleVariant  # ChangeType 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何用腾讯建站主机快速创建免费网站?  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  如何快速搭建二级域名独立网站?  再谈Python中的字符串与字符编码(推荐)  Laravel如何处理文件下载请求?(Response示例)  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Python文本处理实践_日志清洗解析【指导】  Laravel如何创建自定义Artisan命令?(代码示例)  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  利用JavaScript实现拖拽改变元素大小  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Python数据仓库与ETL构建实战_Airflow调度流程详解  nginx修改上传文件大小限制的方法  Windows Hello人脸识别突然无法使用  韩国服务器如何优化跨境访问实现高效连接?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  如何快速搭建支持数据库操作的智能建站平台?  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  如何构建满足综合性能需求的优质建站方案?  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  Linux安全能力提升路径_长期防护思维说明【指导】  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel如何实现一对一模型关联?(Eloquent示例)  Python进程池调度策略_任务分发说明【指导】  如何彻底删除建站之星生成的Banner?  如何在IIS7中新建站点?详细步骤解析  Python高阶函数应用_函数作为参数说明【指导】  如何用VPS主机快速搭建个人网站?  如何在云主机上快速搭建多站点网站?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  MySQL查询结果复制到新表的方法(更新、插入)  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  如何在IIS管理器中快速创建并配置网站?  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  如何在Windows环境下新建FTP站点并设置权限?  如何快速使用云服务器搭建个人网站?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  如何快速启动建站代理加盟业务?  中山网站推广排名,中山信息港登录入口?  如何选择可靠的免备案建站服务器?  UC浏览器如何设置启动页 UC浏览器启动页设置方法