天天看点

在delphi中生成GUID

什么是 GUID ?

全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装。在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID。

GUID 的格式为8-4-4-4-12 :“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”其中每个 x 是 0-9 或 A-F 范围内的一个十六进制的数字。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。

为什么要使用 GUID ?

世界上的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。数据库中用作主键,标识唯一且在不同的数据库之间转换数据不会出错,而用自增字段就会有很多麻烦。在 Windows 平台上,GUID 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。

Delphi中如何生成GUID:

// uses ComObj
function getGUID():string;
 var
  sGUID: string;
begin
  sGUID := CreateClassID;
  //ShowMessage(sGUID); // 两边带大括号的Guid
  Delete(sGUID, 1, 1);
  Delete(sGUID, Length(sGUID), 1);
  //ShowMessage(sGUID); // 去掉大括号的Guid,占36位中间有减号
  sGUID:= StringReplace(sGUID, '-', '', [rfReplaceAll]);
  //ShowMessage(sGUID); // 去掉减号的Guid,占32位
  result:=sGUID;
end;
           

生成GUID的算法根据以下几个方面:1.当前日期与时间。2.网卡地址。3.时针序。4.自动递增计数器。其中,网卡地址是相互不同的,对没有网卡的机器,自动递增计数器对使用中的机器保持唯一性,MS保证同一台电脑中每秒生成100个GUID在3000多年内一个GUID是绝对唯一的.

Delphi做的程序,如果想包含版本信息, 必须在Delphi的集成编辑环境的菜单“Project/Options/Version Info”里面添加版本信息。即在Version Info 选项卡中选中“Include version information in project”项,并在“Module version number”中设置Major version(主版本号)、 Minor version(副版本号)、 Release(发行版本号)、 Build(内部版本号)。

  设置好后,在程序中写入下面的函数:

function GetBuildInfo: string; //获取版本号

var

 verinfosize : DWORD;

 verinfo : pointer;

 vervaluesize : dword;

 vervalue : pvsfixedfileinfo;

 dummy : dword;

 v1,v2,v3,v4 : word;

begin

 verinfosize := getfileversioninfosize(pchar(paramstr(0)),dummy);

 if verinfosize = 0 then begin

  dummy := getlasterror;

  result := '0.0.0.0';

 end;

 getmem(verinfo,verinfosize);

 getfileversioninfo(pchar(paramstr(0)),0,verinfosize,verinfo);

 verqueryvalue(verinfo,'\',pointer(vervalue),vervaluesize);

 with vervalue^ do begin

  v1 := dwfileversionms shr 16;

  v2 := dwfileversionms and $ffff;

  v3 := dwfileversionls shr 16;

  v4 := dwfileversionls and $ffff;

 end;

 result := inttostr(v1) + '.' + inttostr(v2) + '.' + inttostr(v3) + '.' + inttostr(v4);

 freemem(verinfo,verinfosize);

end;

  //然后,在程序中调用函数即可。

procedure TForm1.FormCreate(Sender: TObject);

begin

 label1.Caption := '版本 ' + GetBuildInfo;

end;
           

继续阅读