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

_GUID(全球唯一标识符)学习

2010-07-02 23:57 218 查看
全局唯一标识符在学习COM是常常用到,很长的一段数据。虽然很多东西不需要自己去深入,但是混过眼熟总是很好的。每次看到这么一大串数字,心中无名火大。现在把它抓出来说一说,摆一摆。以后看见就会自然一点了。学习也就是先混眼熟,在心熟的过程吧。

关于_GUID有很多中的表示方法了。

typedef struct _GUID GUID;
typedef GUID IID;
typedef GUID CLSID;



在程序代码中常常都看到使用上面的其中一个。这个typedef 关键字啊,就被这些人拿去乱用,好好的一个_GUID和这个GUID有多大差别,硬是要搞来搞去的定义,没事找事干。说归说了,也可以自己定义自己的写法。但不管如何变,其本质就如下面一样:



#ifndef GUID_DEFINED
#define GUID_DEFINED
typedef struct _GUID
{
unsigned long Data1;//4个字节
unsigned short Data2;//2个字节
unsigned short Data3;//2个字节
unsigned char Data4[8];//8个字节
} GUID;
#endif /* GUID_DEFINED */

#ifndef __LPGUID_DEFINED__
#define __LPGUID_DEFINED__
typedef GUID *LPGUID;
#endif



如上面结构体所示,刚好16个字节,也就是128位。至于为什么说他是全球唯一标识符。我不去管它。我的目的就是要记住他是怎么写的。我怎么才能够看到他时,不那么陌生。会像看到老熟人一样就可以了。

根据其结构如果让我对他赋值。将会如下写:

_GUID myGuid =

{

0x********,0x****,0x****,{0x**,0x**,0x**,0x**,0x**,0x**,0x**,0x**}

};

这样写很清晰,以后让我手动给一个_GUID值也能够简单的给出,当然实际中是不会要求自己写的。因为这样既无法保证唯一性,因为每个人对编号都有一定的习惯,这天手动写一个不会重复,写很多次后就不敢保证会不会重复了。哈哈。。。所以一般用程序生成了。

写成字符串也是××××××××-××××-××××-××××-××××××××××××。在注册表CLSID键下的项都是这样表示的 。

好了,收工了,看到这样的数字,不要想到是128位,而是想到是16个字节。不要想到是16个字节,要想到是4个字节+2个字节+2个字节+8个字节。就好了。不要想到他有多深奥,其实就是一堆烂数字,刚学COM时,总是看到这堆数字就头疼。今天终于把他拉出来鞭尸,以解心头之恨,痛快、痛快啊。。。。。。。。。。。。。。本文纯属胡编乱造,请读者胡编乱看即可,不必介意。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: