Criação e otimizações de GUID

Como um CLSID, como um identificador de interface (IID), é um GUID, nenhuma outra classe, não importa quem o escreva, tem um CLSID duplicado. Os implementadores de servidor geralmente obtêm CLSIDs por meio da função CoCreateGuid. Esta função é garantida para produzir CLSIDs exclusivos, para que os implementadores de servidor em todo o mundo possam desenvolver e implantar seu software de forma independente sem medo de colisão acidental com software escrito por outros.

O uso de CLSIDs exclusivos evita a possibilidade de colisões de nomes entre classes porque os CLSIDs não estão de forma alguma conectados aos nomes usados na implementação subjacente. Por exemplo, dois fornecedores diferentes podem escrever classes chamadas "StackClass", mas cada um teria um CLSID exclusivo e, portanto, não poderia ser confundido.

COM frequentemente deve mapear GUIDs (IIDs e CLSIDs) para algum conjunto arbitrariamente grande de outros valores. Como desenvolvedor de aplicativos, você pode ajudar a acelerar essas pesquisas e, assim, melhorar o desempenho do sistema, gerando os GUIDs para seu aplicativo como um bloco de valores consecutivos.

A maneira mais eficiente de gerar um bloco de GUIDs consecutivos é executar o utilitário uuidgen usando os switches -n e -x, que gera um bloco de UUIDs, cada um dos quais o primeiro valor DWORD é incrementado por um.

Por exemplo, se você fosse digitar

uuidgen -n5 -x

o utilitário uuidgen geraria um bloco de UUIDs semelhante ao seguinte:

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
 

Um método para gerar e rastrear GUIDs para um projeto inteiro começa com a geração de um bloco de um número arbitrariamente grande de UUIDs, digamos 500. Por exemplo, se você fosse digitar

uuidgen -n500 -x > guids.txt

o utilitário geraria 500 UUIDs consecutivos e os gravaria no arquivo de texto especificado. Em seguida, você pode verificar esse arquivo em sua árvore de código-fonte, fornecendo um único repositório para todos os GUIDs a serem usados em um projeto. Como as pessoas precisam de GUIDs para suas partes do projeto, elas podem fazer check-out do arquivo, pegar quantos GUIDs precisarem, marcá-los como tirados e deixar uma nota sobre onde no código ou "especificação" eles estão usando-os.

Além de melhorar o desempenho do sistema, gerar blocos de GUIDs consecutivos dessa forma tem os seguintes benefícios:

  • Um arquivo central contendo todos os GUIDs de um aplicativo facilita o controle de quais GUIDs são para quê e quais pessoas os estão usando.
  • Um bloco de GUIDs consecutivos associados a um aplicativo específico ajuda os desenvolvedores e testadores a reconhecer GUIDs internos durante a depuração e facilita sua localização no registro do sistema, pois eles são armazenados sequencialmente.

Responsabilidades do servidor COM