作者:朱金灿

来源:http://blog.csdn.net/clever101

一个软件模块的版本如何维护呢?毫无疑问,它需要一个版本号。通过比对版本号就知道哪个高版本,哪个是低版本了。软件模块以dll的方式出现。开始我想通过获取dll的最后修改时间来作为版本号,后来一想这个不太准确,因为将文件拷贝来拷贝去,最后修改时间也不一定准确了。因此比较可靠的做法是将文件创建时间写入dll,然后读取这部分的内容作为它的版本号。

晚上写一个小程序,证实了这个想法可行,代码如下:

#include <windows.h>
#include <conio.h> int _tmain(int argc, _TCHAR* argv[])
{
FILE* fp = _tfopen(_T("E:\\2012\\src\\outdir\\Debug\\DataSrc.dll"),_T("ab+"));
fseek(fp,0L,SEEK_END);
// 获取系统时间并写入到文件
SYSTEMTIME sys;
GetLocalTime( &sys );
TCHAR szTimeBuf[64] = {0};
_stprintf(szTimeBuf,_T("%4d/%02d/%02d/%02d/%02d/%02d"),sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond);
size_t len = fwrite(szTimeBuf,64*sizeof(TCHAR),1,fp);
fclose(fp); fp = NULL;
// 获取文件大小
struct _stat buf;
if( _tstat(_T("E:\\2012\\src\\outdir\\Debug\\DataSrc.dll"), &buf ) != -1 ) {
_tprintf(_T("File size = %d\n"), buf.st_size );
}
fp = _tfopen(_T("E:\\2012\\ src\\outdir\\Debug\\DataSrc.dll"),_T("rb"));
size_t lenRead = buf.st_size-64*sizeof(TCHAR);
fseek(fp,lenRead,SEEK_SET);
TCHAR szBuf[64] = {0};
// 获取文件创建时间
size_t len2 = fread(szBuf,64*sizeof(TCHAR),1,fp);
fclose(fp);
_tprintf(_T("the create time of file is %s\n"),szBuf); getch();
return 0;
}

效果图如下:

进一步的想法是将该程序放到VS的生成后事件,每生成一次就写入一次更新时间,以这个时间作为它的版本号。

关于用什么作为dll版本号的思考的更多相关文章

  1. 发布Mvc 项目 mvc.dll版本号不一致 出现 3.0.0.1 和4.0.0.1的解决方案

    部署Mvc 项目的时候,很可能出现以下情况的提示: System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856a ...

  2. C#dll版本号默认生成规则

    原文:C#dll版本号默认生成规则 1.版本号自动生成方法 只需把 AssemblyInfo.cs文件中的[assembly: AssemblyVersion("1.0.0.0") ...

  3. Diccuz!NT的dll版本号控制技巧

    dnt每次发布新版本时,公布出来的版本号都是3位数以上,拿3.6.711这个版本号的代码来说,几乎每一个dll上都是统一的版本号命名: 对于一个成熟的产品来说,统一一致的版本号命名有以下的好处: 1. ...

  4. 对C#调用C++的dll的一点思考

    最近在对接C++程序的时候碰到了一些问题,然后花了一段时间才解决,今天就这些小问题来做一个总结,很多时候由于对另外一种开发语言的不熟悉,会在使用的过程中遇到很多的问题,这些问题看似简单但是背后却有很多 ...

  5. C#生成exe、dll版本号自动增加

    修改AssemblyInfo.cs 1.注释[assembly: AssemblyFileVersion("1.0.0.0")] 2.[assembly: AssemblyVers ...

  6. 修改dll版本号处理未能加载“******”,或找不到动态链接库依赖的项

    <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken=& ...

  7. VS 生成 dll、exe 版本号与SVN版本号一致

    1.VS 可自动生成版本号 注释掉以下两行代码 [assembly: AssemblyVersion("1.0.0.0")][assembly: AssemblyFileVersi ...

  8. Windows动态链接库DLL

    1.什么是DLLDLL,即动态链接库,是包含若干个函数的库文件,可供其他程序运行时调用. 2.DLL的优缺点优点:代码重用,可供多个程序同时调用 缺点:易发生版本冲突当新版本的动态链接库不兼容旧版本时 ...

  9. VC++制作DLL具体解释

    1.    DLL的基本概念 应用程序(exe)要引用目标代码(.obj)外部的函数时,有两种实现途径--静态链接和动态链接. 1.    静态链接 链接程序搜索相应的库文件(.lib),然后将这个对 ...

随机推荐

  1. 【Educational Codeforces Round 33 B】Beautiful Divisors

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把所有的那些数字打表出来. 逆序枚举就好 [代码] /* 1.Shoud it use long long ? 2.Have you ...

  2. Maven学习总结(15)——Maven 项目中pom.xml详解

    <project xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2 ...

  3. python3 随机生成6位数的验证码

    python3 随机生成6位数的验证码 要求是数字:0~9 及大小写字母. #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung ...

  4. Oracle 排序问题(null带来的)

    null 导致排序有问题, 对于数字的,一定要用nvl来解决.

  5. 杭州"人才新政22条" 硕士来杭工作一次性补贴2万元

    转载自原文杭州"人才新政22条" 硕士来杭工作一次性补贴2万元 2016-11-8 继去年1月推出“人才新政27条”后,杭州在引才上又将有新动作.在昨天举行的2016浙江·杭州国际 ...

  6. 具体解释。。设计模式5——DAO。。studying

    设计模式5--DAO ★ 场景和问题 在Java程序中,常常须要把数据持久化.也须要获取持久化的数据,可是在进行数据持久化的过程中面临诸多问题 (如:数据源不同.存储类型不同.供应商不同.訪问方式不同 ...

  7. DSO Framer _ WinForm 使用

    根据自己对dsoframer控件的学习,想把dsoframer控件进行简单的包装为C#的usercontrol,大体需要作如下:(创建windows的usercontrol的步骤就不再说了...)我们 ...

  8. 5、linux下应用字符串相关调用函数列举说明

    1.函数原型int strcmp(const char *s1,const char *s2);设这两个字符串为s1,s2,规则当s1<s2时,返回为负数当s1=s2时,返回值= 0当s1> ...

  9. QMap 的增删改查

    map 是一种数据容器,它提供一种由key 到 value 的映射.map 的key 是唯一的, 也是有序的.map 通常由近似平衡的红黑树来实现.key 的有序性,使得插入,查找节点比较有效.map ...

  10. Android屏幕信息获取

    Android中有时需要获取屏幕的size信息以便对控件位置进行动态控制,最近做了一些研究,现在将获取屏幕大小信息的方法总结如下,可能存在一些地方理解的不全面. 1.getMetrics Displa ...