Тема: COM/ActiveX: COM-Informer
Приветствую, коллеги.
Поздравляю всех с наступающим Новым Годом, 2012-м - эпичным во всех отношениях, который ко всему прочему обещает быть продуктивным в плане творчества и созидания. И надеюсь что данный топик даст толчок к тому самому продуктивному творчеству!
Как вы наверно знаете, я являюсь давним поклонником технологии COM.
Хочу продемонстрировать инструмент, призванный помочь при работе с библиотеками/ProgID'ами/CLSID'ами, вобщем с COM.
COM-informer. Детальное описание.
Скачать COM-Informer v.1.1 (227kb)
COM-Informer предназначен для получения ключевой информации обо всех классах, экспортируемых COM-сервером:
- Имя
- ProgID
- CLSID
- Путь и имя файла COM-сервера
Помню, были на форуме вопросы из разряда «как получить список идентификаторов ProgID?». В ответе обычно направляют к ObjectBrowser'у.
Но:
а) Ни всякий браузер объектов выдаёт такую информацию
б) Браузер объектов отображает только некоторую часть объектов и интерфейсов, упрямо не замечая остальные. И даже браузер объектов такого монстра как VB6, тоже, страдает этим недугом. А ведь всё очень просто. Но об этом как-нибудь в другой раз [а возможно, и неспроста ларец запрятан ].
в) Что если com-сервер вообще не имеет библиотеки типов (tlb)? Браузер начинает ругаться и отбрехиваться, мол ничего и знать не хочет о таких com-серверах.
А сейчас давайте проведём небольшой эксперимент.
В качестве подопытного возьмём catsrvut.dll (COMEXPLib, «COM Services») из windows\system32.
Берём любой браузер объектов (например, PBROW из пакета PowerBasic - он отображает progid'ы) и натравим его на подопытную библиотеку catsrvut.dll.
ClientExp.ComClientExport.1 - всего один класс, не густо. Что-то связанное с дебрями COM+ подумаете Вы и откините библиотеку в чёрный ящик ненужных вещей.
Но давайте обработаем туже библиотеку в COM-informer'е:
1) в текстовое поле слева вбиваем catsrvut.dll
2) жмём на Get info by Lib.
или заносим полученное "ClientExp.ComClientExport.1" в поле «ProgID or CLSID» и давим на Get info by ProgID.
Получаем аж (!)32 интереснейших класса, 13 из которых юзабельны на 100% и имеют свои ProgID'ы!
Ничего так глаза раскрывает, не правда-ли?
И кстати, раз уж заговорил о полезных и интересных классах из либы - класс MakeCab (откликается на "MakeCab.MakeCab"), жмёт файл в CAB-архив посильнее WinRAR'a (при обычном методе сжатия).
GenerateMSI Class - явно что-то очень интересное и связанное с генерацией инсталяшек.
И таких классов в штатной поставке системы очень много, сродни WMI - тысячи их, или даже больше - порядка 5 тысяч (говорю о XP SP2).