на начало
На главную страницу
Форум   

Статья :: Уникальная идентификация объектов

 

Уникальная идентификация объектов

Данные типа GUID (globally unique identifier) являются 128-битными идентификаторами, состоящими из пяти групп шестнадцатеричных цифр,' которые обычно генерирует специальная программа uuidgen, входящая в инструменты Studio.Net. Например, если вы в командной строке Windows наберете

uuidgen -n2 -s >guids.txt

то в файле guids.txt получите два уникальных числа вида:

{12340001-4980-1920-6788-123456789012}

{1234*0002-4980-1920-6788-123456789012}

которые можно использовать в качестве ключа регистрации в Windows-реестре. Рекомендуется обращаться к утилите uuidgen и просить сразу много идентификаторов, а затем постепенно использовать их (помечая, чтобы не забыть) в своем приложении для идентификации интерфейсов, СОМ-классов и библиотек типов. Это упрощает отладку, поиск в реестре и, возможно, его чистку. Кроме этого способа существуют и другие. Например, можно обратиться к функции

HRESULT CoCreateGuid(GUID *pguid);

которая гарантированно выдаст уникальное 128-битное число, которое не совпадет ни с одним другим числом, полученным в любой вычислительной системе, в любой точке планеты, в любое время в прошлом и будущем. Впечатляюще, не правда ли? Есть целая серия функций вида Uuid* из блока RFC-API, которые генерируют и обрабатывают числа типа GUID. Число, как вы видите, разбито на пять групп, как-то связанных с процессом генерации, в котором задействованы время генерации, географическое место, информация о системе и т. д. Следующие типы переменных эквивалентны типу GUID:

  • CLSID — используются для идентификации СОМ-классов;
  • IID — используются для идентификации СОМ-интерфейсов;
  • UUID (Universally Unique Identifiers) — используются в RPC (Remote Procedure Calls) библиотеках для идентификации клиентов и серверов, а также интерфейсов.

Тип IID используется также и для идентификации библиотек типов. Переменные типа GUID являются структурами, содержащими четыре поля. Тип GUID определен в guiddef.h следующим образом:

typedef struct

{

//=== 1-я группа цифр (8 цифр - 4 байта)

unsigned long Datal;

//=== 2-я группа цифр (4 цифры - 2 байта)

unsigned short Data2;

//=== 3-я группа цифр (4 цифры - 2 байта)

unsigned short Data3;

//=== 4-я и 5-я группы (4 и 12 цифр) - 8 байт

byte Data4[8];

}

GUID;

Мы уже обсуждали необходимость уникальной идентификации интерфейсов. Ну а зачем уникально идентифицировать классы? Предположим, что два разработчика создали два разных СОМ-класса, но оба назвали их MySuperGrid. Так как СОМ узнает класс по его CLSID, а алгоритм генерации CLSID гарантирует его уникальность, то совпадение имен не мешает использовать оба класса в одном клиентском приложении. Система пользуется двумя типами GUID: строковым (применяется в реестре) и числовым (нужен клиентским приложениям).

Я думаю, что в этот момент у неискушенного СОМ-технологией читателя должна слегка закружиться голова. Это нормально, так как по заявлению авторитетов (David Cruglinsky), она будет кружиться в течение примерно полугода, при условии регулярного изучения СОМ-технологий.

 

Уникальная идентификация объектов

страницы в данном разделе 
Урок 8. От сырых COM API к проекту ATL От сырых COM API к проекту ATL
Модель программирования COM Интерфейсы — основа СОМ-технологии
Уникальная идентификация объектов Как работают СОМ-серверы
Разработка сервера Создание класса СОМ-объекта
Файл описания DLL Разработка клиентского приложения
Фабрика классов Независимость от языка
Концепция маршалинга Библиотека типов
Новый проект Использование макросов COM
Разработка клиента с использованием специальных указателей Проект на основе ATL
Как работает DLL Загадочные макросы
Создание элемента типа ATL Control Двойственные интерфейсы


Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)



PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C



 
© faq.pp.ru, справочник программиста