您的位置:首页 > 产品设计 > UI/UE

com 关于CLSID

2014-07-16 19:57 197 查看
CLSID的生成

CLSID是指windows系统对于不同的应用程序,文件类型,OLE对象,特殊文件夹以及各种系统组件分配一个唯一表示它的ID代码,用于对其身份的标示和与其他对象进行区分。

先得说下GUID,它是Globally Unique Identifier的简称,中文翻译为“全局唯一标示符”,在Windows系统中也称之为Class ID,缩写为CLSID。

CLSID像人身份证一样,是个类的唯一标识:

ID是英文IDentity的缩写,是身份标识号码的意思,就是一个序列号,也叫帐号,是一个编码,而且是唯一的。

class是对某种类型的对象定义变量和方法的原型,是ID的样式或属性的补充。

在注册表中展开HKEY_CLASSES_ROOT\CLSID\,在CLSID分支下面就可以看到很多的ID,这些ID对应的都是系统里面不同的程序,文件,系统组件等。

CLSID是一个128位的随机数,为了确保它的随机性,避免重复,它的算法主要是从两个方面入手:

1. 一部分数字来自于系统网卡的序列号,由于每一个网卡的MAC地址都不一样,因此产生的ID也就会有差异。

2. 另外一部分数字来自于系统的当前时间。

有人计算过按照上面两种方式得到ID的随机性,得出的结论是:即使一台电脑每秒产生10000000个CLSID,也可以保证3240年不会重复。

为了避免冲突,微软使用GUID作为CLSID,有生成GUID的函数,主要是根据当时的时间、机器地址等信息动态产生,理论上可保证全球唯一。

生成GUID的C++代码

//--生成GUID的代码
//--相关程序/微软guidgen.exe
#include <objbase.h>
#include <stdio.h>
//--生成GUID
constchar* newGUID()
{
staticcharbuf[64] = {0};
GUID guid;
if(S_OK == ::CoCreateGuid(&guid))
{
_snprintf(buf,sizeof(buf)
,"{%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}"
, guid.Data1
, guid.Data2
, guid.Data3
, guid.Data4[0]
, guid.Data4[1]
, guid.Data4[2]
, guid.Data4[3]
, guid.Data4[4]
, guid.Data4[5]
, guid.Data4[6]
, guid.Data4[7]
);
}
return(constchar*)buf;
}
intmain(intargc,char* argv[])
{
//--COM
CoInitialize(NULL);
printf(newGUID());
printf("\r\n");
//--COM
CoUninitialize();
return0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  com GUID CLSID