COM-组件对象模型,与GUID-全局唯一标识符

原创 小斯  2020-12-06 18:49 

在讨论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值。

本文地址:http://cas01.com/6887.html
关注我们:请关注一下我们的微信公众号:扫描二维码小斯想的公众号,公众号:cas01
温馨提示:本站发布的压缩包如需密码解压,若无特别说明,密码统一为:cas01.com
版权声明:本文为原创文章,版权归 小斯 所有,欢迎分享本文,转载请保留出处!

发表评论


表情