代码之家  ›  专栏  ›  技术社区  ›  ckv

COM中guid的用途

  •  2
  • ckv  · 技术社区  · 14 年前

    只是为了避免名字冲突吗?

    4 回复  |  直到 14 年前
        1
  •  5
  •   Hans Passant    14 年前

    它的作用和名字完全一样。COM客户机可以要求系统使用简单标识符(CoCreateInstance)创建COM对象。该标识符具有整个计算机的作用域。不同的代码块是由程序员编写的,他们彼此不认识,为不同的公司工作。

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

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

    当您使用GUID而不是名称时,这不是问题。它们是全局唯一的ID。相撞的几率在天文上很小。

        2
  •  1
  •   Justin Ethier    14 年前

        3
  •  1
  •   casablanca    14 年前

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

        4
  •  0
  •   sharptooth    14 年前

    现在考虑一个问题—任何开发人员都需要引入新接口和类并使它们唯一可识别的能力。这是因为如果你得到一个接口指针,你的程序会把它当作 InterfaceA* 接口a* 你有一个大问题-你的程序运行到未定义的行为-崩溃或产生意想不到的结果。

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