作者:朱金灿

来源: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. 对于学习apache软件基金会顶级项目源码的一点思路(转)

    ASF的开源项目,为软件行业贡献了太多好的产品和软件思维.学习ASF的项目源码能很大的提升自身的能力.程序运行在服务器上的流程:执行启动脚本(start.sh) -> 指向程序的主方法 -> ...

  2. jdk目录详解及其使用方法

    jdk目录详解 jdk目录详解 JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境.它由一个处于操作系统层之上的 ...

  3. 低成本开始互联网创业:探讨域名、服务器、CDN、邮箱等节流之道

    互联网创业一直是个热门话题,对这个问题我也有不断的思考. 今天,探讨下如何低成本开始互联网创业. 背景 愿意冒险去创业的同志,大多是"屌丝"而非"高富帅",大多 ...

  4. 【hdu 1403】Longest Common Substring

    [链接]h在这里写链接 [题意] 求两个串的最长公共子串. [题解] Sa[i]表示的是字典序为i的后缀的起始位置. 可以把两个字符串合在一起(中间用一个比'z'大的字符分割); 则如果Sa[i-1] ...

  5. 中间件、服务器和Web服务器三者的区别

    相信很多的Web安全初学者和我一样,对中间件和服务器的认识不够深刻,对两者的概念可能会有所混淆. 正好今天在学习的时候突然想到了这个问题,粗略百度了一下,似乎网上对这个问题的解释不多,那么就由我来为大 ...

  6. Java Tread多线程(2)多线程安全问题

    作者 :卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39348093 本文演示,Tread多线程安全问题,以及几种解决多线程安全方式 ...

  7. (二)SSO之CAS框架单点退出,自己定义退出界面.

    用CAS的退出,仅仅能使用它自己的那个退出界面,假设有这种要求, 要求退出后自己主动跳转到登录界面, 该怎样做呢? 以下这篇文章实现了退出后能够自己定义跳转界面. 用了CAS,发现退出真是个麻烦事,退 ...

  8. swift学习第十二天:类的属性定义

    类的属性介绍 Swift中类的属性有多种 存储属性:存储实例的常量和变量 计算属性:通过某种方式计算出来的属性 类属性:与整个类自身相关的属性 存储属性 存储属性是最简单的属性,它作为类实例的一部分, ...

  9. java异常中Exception捕获不到的异常

    一 概念 众所周知java提供了丰富的异常类,这些异常类之间有严格的集成关系,分类为 父类Throwable Throwable的两个子类Error和Exception Exception的两个子类C ...

  10. 如何解决安卓SDK无法下载Package的问题 分类: H1_ANDROID 2013-09-09 10:26 1199人阅读 评论(0) 收藏

    转载自:http://jingyan.baidu.com/article/8275fc86dbe84046a03cf69d.html 有些用户在安装好Android SDK后,打开Android SD ...