Поделиться через


Создание и оптимизация GUID

Так как CLSID, например идентификатор интерфейса (IID), является ИДЕНТИФИКАТОРом GUID, ни один другой класс, независимо от того, кто записывает его, имеет дубликат CLSID. Средства реализации сервера обычно получают CLSID через функцию CoCreateGuid. Эта функция гарантирует создание уникальных CLSID, поэтому разработчики сервера во всем мире могут независимо разрабатывать и развертывать программное обеспечение без страха случайного столкновения с программным обеспечением, написанным другими пользователями.

Использование уникальных clSID позволяет избежать конфликтов имен между классами, так как CLSID не подключены к именам, используемым в базовой реализации. Например, два разных поставщика могут писать классы с именем StackClass, но каждый из них имеет уникальный CLSID и поэтому не может быть запутанным.

COM часто должен сопоставлять идентификаторы GUID (IID и CLSID) с некоторым произвольным большим набором других значений. Разработчик приложений помогает ускорить такие поиски и тем самым повысить производительность системы, создав идентификаторы GUID для приложения в качестве блока последовательных значений.

Наиболее эффективным способом создания блока последовательных идентификаторов GUID является запуск служебной программы uuidgen с помощью коммутаторов -n и -x, который создает блок 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 во время отладки и упрощает их поиск в системном реестре, так как они хранятся последовательно.

Обязанности COM-сервера