Как узнать progid класса com
Перейти к содержимому

Как узнать progid класса com

Ключ ProgID

Программный идентификатор (ProgID) — это запись реестра, которая может быть связана с CLSID. Как и CLSID, ProgID идентифицирует класс, но с меньшей точностью, так как он не гарантируется глобально уникальным.

Параметр реестра

Раздел реестра Описание
CLSID Связывает progID с CLSID.
Вставка Указывает, что этот класс можно вставить в контейнеры OLE 2.
Протокол Указывает, что этот класс OLE 2 можно вставить в контейнеры OLE 1.
Shell Предоставляет Windows печати оболочки 3.1 и сведений о открытии файла.

Remarks

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

Формат ProgID — <Program>.<Компонент>.<Версия>, разделенная точками и без пробелов, как в Word.Document.6. ProgID должен соответствовать следующим требованиям:

  • Не более 39 символов.
  • Не содержат знаков препинания (включая знаки подчеркивания), кроме одного или нескольких периодов.
  • Не начинайте с цифры.
  • Отличаться от имени класса любого приложения OLE 1, включая версию OLE 1 того же приложения, если она существует.

Так как идентификатор ProgID не должен отображаться в пользовательском интерфейсе, можно получить отображаемое имя, вызвав IOleObject::GetUserType. См. также раздел OleRegGetUserType.

Ключ HKEY_LOCAL_MACHINE\SOFTWARE\Classes соответствует ключу HKEY_CLASSES_ROOT , который был сохранен для совместимости с более ранними версиями COM.

progid

name
Идентификатор ProgID, представляющий объект.

идентификаторы progid представляют собой удобочитаемую для человека версию идентификатора класса (CLSID), используемую для идентификации объектов COM/ActiveX.

Комментарии

progid Атрибут C++ позволяет указать ProgID для COM-объекта. Идентификатор ProgID имеет форму name1. имя2. Version. Если не указать версию для ProgID, используется версия по умолчанию 1. Если не указать name1. имя2, по умолчанию используется имя className. ClassName. Если параметр не указан progid и задано vi_progid значение, name1. имя2 берется из vi_progid и добавляется версия (следующий последовательный номер).

Если блок атрибута, который использует progid , не используется uuid , Компилятор проверит наличие в реестре, существует ли объект для указанного progid объекта uuid . Если progid параметр не указан, для создания progid класса будет использоваться версия (и имя кокласса, если создается coclass).

progid coclass подразумевает атрибут, то есть, если вы указали progid , это то же самое, что и указание coclass атрибутов и progid .

progid Атрибут вызывает автоматическую регистрацию класса с указанным именем. Созданный IDL-файл не будет отображать это progid значение.

Если этот атрибут используется в проекте, использующем ATL, поведение атрибута изменяется. В дополнение к описанному выше поведению, сведения, указанные с помощью этого атрибута, используются в GetProgID функции, внедренной coclass атрибутом. Дополнительные сведения см. в описании атрибута coclass .

Пример

Пример использования progid см. в примере для coclass .

Требования

Контекст атрибута Значение
Относится к class , struct
REPEATABLE Нет
Требуемые атрибуты Нет
Недопустимые атрибуты Нет

Дополнительные сведения о контекстах атрибутов см. в разделе Контексты атрибутов.

Как узнать progid класса com

Это идентификатор программы, по которому можно получить CLSID. В реестре он находится по пути:

Например, по этому пути находится описание CLSID excel:

Соответственно на этой машине я могу создать объект Excel. Например, в Visual Basic:

Если Вы посмотрите у себя этот раздел в реестре, то увидите, что классов там намного больше чем программ. Это естественно, так как одна программа, скажем excelVC. Для получения CLSID на основе ProgID используется функция CLSIDFromProgID(). Можно и наоборот — зная CLSID получить ProgID — функция ProgIDFromCLSID(). Посмотрите на рисунок ниже:

Чем удобно использование ProgID это тем, что Вы можете избавиться от проблем с версиями для пользователя. Если Вы будете использовать один ProgID для всех версий, то у пользователя не будет проблем при выходе новой версии. Ведь в новой версии должен быть новый CLSID. Кроме того использование подобных строковых параметров намного удобнее, чем сам CLSID. Честное слово.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *