首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201206A0A0R600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券