COM中GUID的用途是什么?
是否只是为了避免名称冲突?
答案 0 :(得分:5)
它与名称完全相同。 COM客户端可以要求系统使用简单标识符(CoCreateInstance)创建COM对象。该标识符具有整个机器的范围。程序员编写的不同代码块彼此不了解并为不同的公司工作。
名字的问题在于人们很擅长选择好名字。一个程序员选择与另一个程序员完全相同的名字的可能性,距离3000英里和5年前很高。像“记录”,“数据库”等名称将是流行的选择。在这个网站上也很明显,很多用户都是“Jason”或“Mike”。他们不介意,他们在审查自己的个人资料时知道自己的名字。语境。当他们向我发送一封只包含他们用户名的电子邮件时,我不可能找到他们,跟进一个带有通用主题字符串的问题。
获取名称冲突并且COM创建错误的对象是灾难性的。程序停止工作,因为它得到一个完全错误的对象。找出原因很难,错误信息很糟糕。实际上解决这个问题是不可能的。打电话给程序员B,并以最友好的方式问他“选择一个不同的名字,有人已经选择了你的名字”不起作用。自动响应是“呼叫程序员A”。
使用GUID而不是名称时,这不是问题。它们是全球唯一ID。发生碰撞的几率天文数字很小。
答案 1 :(得分:1)
可能,因为它可以保证每个对象的全局唯一标识符。
答案 2 :(得分:1)
顾名思义,它是一个标识符,与其他任何标识符的用途相同。正如您所提到的,避免名称冲突是一种用途。另一个优点是它只有128位长(与可能任意长的名称相比),因此比较两个GUID比比较它们的相应名称要快得多。
答案 3 :(得分:0)
顾名思义,GUID是全球唯一标识符。这意味着,如果一个开发人员生成两个GUID,他将获得两个不同的GUID,如果两个彼此不了解的开发人员每个生成一个GUID - 无论是在同一时刻还是在不同时刻 - 他们又会获得两个不同的GUID。 / p>
现在考虑一个问题 - 任何开发人员都需要能够引入新的接口和类,并使它们具有唯一的可识别性。那是因为如果你得到一个接口指针并且你的程序将它视为某些InterfaceA*
但它确实不是InterfaceA*
你遇到了一个重大问题 - 你的程序会遇到未定义的行为 - 崩溃或产生意外结果
使用GUID可以轻松解决上述问题。每个开发人员为他引入的每个新接口或类创建一个新的(因此唯一的)GUID值。这是可靠和方便的(除了GUID不是人类可读的)。