GUID 创建和优化

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

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

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

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

例如,如果您要键入

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,并更轻松地在系统注册表中查找按顺序存储的 GUID。

COM 服务器职责