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

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

  • автор:

Ключ ProgID

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

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

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

Комментарии

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 класса com

Здравствуйте. Подскажите.
Как узнать ProgID COM объекта, если у меня есть .Lib и .H(Описание интерфейсов и др)? Можно ли как обойтись без ProgID создавая объект на стороне клиента?

Re: Как узнать ProgID

От: angry.andrew
Дата: 09.08.12 12:05
Оценка: 3 (1) +1

ProgID как раз штука вторичная при создании COM-объекта, т.к. основным идентификатором класса служит CLSID, который передается, например, в CoCreateInstance. CLSID класса объявлен в .h-файле, генерируемом из .idl.
ProgID — это такой строковый идентификатор класса, придуманный в основном ради всяких скриптовых языков, в которых неудобно иметь дело с GUID-ами. ProgID прописывается в реестре COM-сервером при регистрации. Для зарегистрированного COM-сервера можно использовать функции ProgIDFromCLSID и CLSIDFromProgID для взаимной конвертации ProgID и CLSID.

Здравствуйте, TARGRED, Вы писали:

TAR>Здравствуйте. Подскажите.
TAR>Как узнать ProgID COM объекта, если у меня есть .Lib и .H(Описание интерфейсов и др)? Можно ли как обойтись без ProgID создавая объект на стороне клиента?

TAR>Спасибо.

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ =

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

HKEY_LOCAL_MACHINE\Software\CLASSES\Excel.Application

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

Set xl=CreateObject("Excel.Application")

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

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

§ 14. Реестр Windows .

Реестр Windows – это общедоступная база данных операционной системы. Реестр содержит информацию об аппаратном и программном обеспечении, о конфигурации компьютера и о пользователях. Клиенты могут искать там нужные компоненты.

§ 14.1. Организация реестра.

Информация в реестре упорядочена иерархически и имеет несколько предопределенных высокоуровневых разделов. В разделе HKEY _ CLASSES _ ROOT хранится информация о компоненте. Важным подразделом HKEY _ CLASSES _ ROOT является CLSID (идентификаторы классов), в котором описывается каждый компонент, установленный в системе. В Windows 95 и WindowsNT существуют программы редактирования реестра REGEDIT . EXE и REGEDIT 32. EXE (редактируя реестр легко повредить систему).

CLSID компонента хранится в реестре как строка формата (ххххххх_хххх_хххх_хххх_ххххххххххх) идентификатор класса CLSID компонента является его уникальным идентификатором, однако он неудобен для чтения и запоминания. Понятие ProgID (программный идентификатор) включено в СОМ для облегчения взаимодействия с компонентами разработчиков. ProgID отображает «дружественную», понятную программисту строку в CLSID . Уникальность ProgID не гарантируется. По соглашению ProgID имеет следующий формат

(до 39 символов версия необязательна)

В CLSID есть еще подраздел InprocServer 32.

Его параметр по умолчанию – имя файла DLL .

DLL – это сервер в процессе; она загружается в процессе клиента и предоставляет ему сервисы.

После того, как вы поместили в реестр нужную информацию, получить CLSID по ProcID и наоборот легко. Библиотека СОМ API предоставляет несколько функций, предназначенных для сравнения, создания и преобразования типов GUID . Наиболее употребляемые из них:

Обеспечивает создание одного уникального GUID

ISEgualIID (REFIID, REFIID )

Сравнивает два IID

ISEgualIID (REFCLSID, REFCLSID )

Сравнивает два CLSID

CLSIDFromProgID (LPCOLESTR, LPCLSID)

Возвращает CLSID для задания ProgID

ProgIDFromCLSID (REFCLSID, LPOLESTR*)

Возвращает ProgID для CLSID

§ 14.2. Саморегистрация.

Для того, чтобы поместить информацию о компоненте в реестр Windows , необходимо экспортировать две функции:

[ STDAPI определен в objBASE . H как # defane STDAPI EXTERN _ C HRESULT STDAPICALLTYPE что раскрывается в extern » C ” HRESULT _ stdcall ]

С помощью программы утилиты REGSVR 32. TXT эти функции можно вызывать для регистрации компонента.

Большинство программ установки вызывают DLLRegisterServer в процессе своей работы. Для этого нужно загрузить DLL с помощью LoadLibrery , получить адрес функции с помощью GetProcAddress и потом вызвать функцию.

§ 14.3. Категории компонентов.

Клиент определяет, какой компонент ему следует использовать, но прежде, чем создать экземпляр этого компонента, надо определить, поддерживает ли компонент нужные интерфейсы.

Решение этой проблемы дают категории компонентов. Категория компонентов – это набор интерфейсов, которым присвоен CLSID , называемый в Ланном случае CATID . Компоненты, реализующие все интерфейсы некоторой категории, могут зарегистрироваться, как члены данной категории. Это позволяет клиентам более осмысленно выбирать компоненты из реестра, рассматривать только те, которые принадлежат к некоторой категории.

Компонент может входить в произвольное число категорий. Компонент не обязан поддерживать исключительно те интерфейсы, которые определены категорией, он может поддерживать любой интерфейс в дополнение к ним.

В системе Windows , имеется стандартный диспетчер категории компонентов ( CLSID _ StdComponentCategoriesMgr ) – стандартный компонент СОМ, реализующий два интерфейса, ICatRegister и ICatInformation . ICatRegister используется для регистрации и удаления категорий, для дебавления и удаления компонентов к категории. С помощью ICatInformation можно найти:

1) все категории зарегистрированные в системе;

2) все компоненты , принадлежащие данной категории;

3) все категории, которым принадлежит данный компонент.

§ 14.4. OleView .

[Редактор реестра показывает все данные в виде списка CLSID .] Хорошим средством просмотра реестра с точки зрения СОМ является утилита OLEVIEW , представляемая Visial С++ и средой SDK . Она обеспечивает несколько различных подходов к использованию компонентов в вашей системе. Вместо длинного списка CLSID и других CUID OLEVIEW отображает деревья, содержащие элементы с дружественными именами. Кроме того, OLEVIEW позволяет просматривать категории компонентов, установленных в системе.

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

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