GUID 创建和优化

由于 CLSID(如接口标识符 (IID) )是一个 GUID,无论谁写入它,都没有其他类具有重复的 CLSID。 服务器实现者通常通过 CoCreateGuid 函数获取 CLSID。 此函数可以保证生成独特的 CLSID,因此世界各地的服务器实现者可以独立开发和部署其软件,而不必担心意外与其他人编写的软件发生冲突。

使用唯一 CLSID 可避免类之间发生名称冲突,因为 CLSID 无法连接到基础实现中使用的名称。 例如,两个不同的供应商可以编写名为“StackClass”的类,但每个供应商都有唯一的 CLSID,因此无法混淆。

COM 经常必须将 GUID (IID 和 CLSID) 映射到一些任意大型的其他值集。 作为应用程序开发人员,可以通过生成应用程序的 GUID 作为连续值块来帮助加快此类搜索的速度,从而增强系统性能。

生成连续 GUID 块的最有效方法是使用 -n 和 -x 开关运行 uuidgen 实用工具,该开关生成一个 UUID 块,其第一个 DWORD 值递增一个。

例如,如果要键入

uuidgen -n5 -x

uuidgen 实用工具将生成类似于以下内容的 UUID 块:

12340001-4980-1920-6788-123456789012
12340002-4980-1920-6788-123456789012
12340003-4980-1920-6788-123456789012
12340004-4980-1920-6788-123456789012
12340005-4980-1920-6788-123456789012
 

整个项目的生成和跟踪 GUID 的一种方法从生成一些任意数量的 UUID 块开始,例如 500。 例如,如果要键入

uuidgen -n500 -x > guids.txt

该实用工具将生成 500 个连续 UUID 并将其写入指定的文本文件。 然后,可以将此文件签入源树,为项目中使用的所有 GUID 提供单个存储库。 由于用户需要项目部分的 GUID,他们可以签出文件,采取他们需要的多个 GUID,将其标记为已采取,并记下他们正在使用的代码或“规范”中的位置。

除了提高系统性能外,以这种方式生成连续 GUID 块具有以下优势:

  • 包含应用程序的所有 GUID 的中心文件使跟踪哪些 GUID 适用于哪些 GUID 以及哪些用户使用它们。
  • 与特定应用程序关联的连续 GUID 块可帮助开发人员和测试人员在调试期间识别内部 GUID,并更轻松地在系统注册表中查找它们,因为它们是按顺序存储的。

COM 服务器职责