Повышение производительности труда программистов на основе повторного использования типовых элементов является далеко не новой задачей. Библиотеки стандартных программ предназначались для тех же целей и появились, скорее всего, вместе с первыми компиляторами и операционными системами. В традиционном объектно-ориентированном программировании классы скрывают детали их реализации, предоставляя доступ только к методам. Обычные DLL-библиотеки тоже скрывают от разработчика приложений реализацию экспортируемых функций. Сохраняя шаблоны экспортируемых библиотекой функций, можно изменять их внутреннюю реализацию.
СОМ-объекты стали следующим шагом в направлении повторного использования разработанного программного кода. Это обычный объект, реализованный внутри исполняемого модуля (DLL- или ЕХЕ-файла) и соответствующий дополнительным требованиям, которые, с одной стороны изолируют описание интерфейса приложения с объектом от реализации его функциональности, а с другой - обеспечивают возможность однозначно идентифицировать, найти и загрузить СОМ-сервер и вызвать необходимые приложению методы объекта.
Если библиотеки на продажу будет производить широкий круг разработчиков, то может возникнуть ситуация, когда имена библиотек начнут повторяться. Поэтому СОМ-объекты и их интерфейсы идентифицируются числами, занимающими 16 байт, которые называются GUID (или UUID) - глобально уникальные идентификаторы. Фирма Microsoft обещает, что если для компьютеров с установленным сетевым адаптером любым способом сгенерировать GUID, то будет сформирован идентификатор, уникальный во времени и пространстве. Никогда и нигде на земном шаре уже не будет сгенерирован такой же идентификатор.
В файле Win NT. h структура этого идентификатора определена следующим образом:
typedef struct _GUID { DWORD Datai:
Характеристика СОМ-объектов
WORD Data2; WORD Data3; BYTE Data4[8]: } GUID;
Заполнять эту структуру данными удобно, если использовать определенный в Objbase.h макрос:
#define DEFINE_GUID(name. 1. wl. w2. Ы. Ь2. ЬЗ. Ь4. Ь5. Ьб. Ь7, Ь8) \ EXTERN_C const GUID name - { 1. wl. w2. { bl. Ь2. ЬЗ. Ь4. Ь5. Ьб. Ь7. Ь8 }}