在讨论onenote的内置对象的ID属性之前,有必要先了解一个基础概念——GUID,全局唯一标识符。
COM,全称是Component Object Model ,即组件对象模型。COM是微软为提高软件开发效率而开发出的一种软件开发新技术。OLE、ActiveX及DirectX等都是基于COM建立起来的。
在COM规范中,客户程序不会直接访问 COM组件,而是通过一个全局标识符进行对象的创建和初始化工作。在规范设计之初,设计人员需要考虑的问题是:如何定义全局标识符,才能确保其唯一性呢?通过GUID。GUID广泛应用于微软的产品中,例如,而微软系统的注册表、接口标识、数据库等对象中,随处可见GUID。
1
IP地址是如何保证唯一性的?
设计人员最先考虑的是IP地址的实现方式。
在TCP/IP网络协议中,用IP地址来标识每一台计算机,这种地址具有唯一性,这是互联网实现正常通信的基本前提。IP地址是一个32位的二进制数。为了确保唯一性,IP地址由权威机构InternetNIC在全球范围内进行统一分配。
而对于COM组件的开发和使用,显然不可能专门弄个管理机构来分配标识符,如果是那样就毫无开发效率可言了。于是微软采用了另一种方式:发明一种算法,每次都能产生全球唯一的标识符。
2
GUID的产生
没有管理机构,又该如何保证标识符的唯一性?COM规范采用128位的全局唯一标识符(即GUID,Globally Unique Identifier),这是一个由特殊算法产生的随机数,不需要专门的管理机构。
既然是随机数,那就不可能绝对保证唯一性,但GUID重复的概率是极低的。《COM原理与应用》一书中指出,“从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。”
GUID的随机性可以从两方面得到保证:1.空间,对联网机器,取网络适配器的地址值,未联网机器则用其他算法产生;2.时间,同一机器在不同时间产生的标识符自然是不相同的。因此,在实际使用时,根本无需担心会产生重复的GUID。
3
GUID的格式
GUID的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”(32个x),其中每个 x 是 0-F 范围内的一个16进制数字。一个16进制是4个二进制,所以GUID是一个二进制长度为128位的数字标识符。
例如,F3786832-BC35-45D6-97A4-98B7F4A025F6,即为一个有效的GUID值。
领取专属 10元无门槛券
私享最新 技术干货