COM中guid的用途

COM中guid的用途,com,guid,Com,Guid,COM中GUID的用途是什么 它只是为了避免名称冲突吗?可能,因为它会保证每个对象都有一个全局唯一的标识符。顾名思义,它是一个标识符,与任何其他标识符的用途相同。正如您所提到的,避免名称冲突是一个用途。另一个优点是它只有128位长(与一个可以任意长的名称相比),因此比较两个guid要比比较它们对应的名称快得多。它的作用与名称完全相同。COM客户端可以要求系统使用简单标识符(CoCreateInstance)创建COM对象。该标识符具有完整机器的范围。不同的代码块是由互不相识、为不同公司工作的程序

COM中GUID的用途是什么


它只是为了避免名称冲突吗?

可能,因为它会保证每个对象都有一个全局唯一的标识符。

顾名思义,它是一个标识符,与任何其他标识符的用途相同。正如您所提到的,避免名称冲突是一个用途。另一个优点是它只有128位长(与一个可以任意长的名称相比),因此比较两个guid要比比较它们对应的名称快得多。

它的作用与名称完全相同。COM客户端可以要求系统使用简单标识符(CoCreateInstance)创建COM对象。该标识符具有完整机器的范围。不同的代码块是由互不相识、为不同公司工作的程序员编写的

名字的问题是人们不善于挑选好名字。一个程序员在3000英里外和5年前选择与另一个程序员完全相同的名字的几率很高。诸如“记录”、“数据库”等名称将是流行的选择。显然,在这个网站上也有很多名为“Jason”或“Mike”的用户。他们不介意,他们在查看个人资料时知道自己的名字。上下文但是,当他们给我发送一封只包含用户名的电子邮件时,我不可能找到他们,用一个通用主题字符串来回答一个问题

名称冲突和COM创建错误的对象是灾难性的。程序停止工作,因为它获取的对象完全错误。找出原因很困难,错误消息很糟糕。实际上,解决这个问题是不可能的。打电话给程序员B,以最友好的方式询问他“选择一个不同的名字,有人已经选择了你的名字”是行不通的。自动响应为“呼叫程序员A”


当您使用GUID而不是名称时,这不是问题。它们是全局唯一的ID。发生碰撞的几率非常小。

顾名思义,GUID是一个全局唯一的标识符。这意味着,如果一个开发人员生成两个GUID,他会得到两个不同的GUID;如果两个开发人员彼此都不了解,他们会在同一时刻或不同时刻生成一个GUID,他们会再次得到两个不同的GUID

现在考虑一个问题——任何开发人员都需要引入新的接口和类并使它们具有唯一可识别性的能力。这是因为如果你得到一个接口指针,而你的程序将它视为某个

interfaceea*
,但它实际上不是
interfaceea*
,那么你就遇到了一个大问题——你的程序运行到未定义的行为——崩溃或产生意外的结果


使用guid很容易解决上述问题。每个开发人员为他引入的每个新接口或类创建一个新的(因而是唯一的)GUID值。这是可靠和方便的(除了guid不是人类可读的)。

但是它是guid的唯一用途吗?