Oleview
Я использовал Oleview
для этой цели (назад в тот день:))
Ручной / программный
Если я правильно помню (поблизости нет ПК с Windows):
- класс должен ссылаться на библиотеку типов
- typelib будет указывать на двоичный файл (dll, ocx, exe)
- этот двоичный файл содержит физическую библиотеку типов, которую вы должны проанализировать
- это может сделать midl-компилятор (генерировать заглушки / заголовки C)
- oleview может это сделать (извлечь IDL)
- tlbimp может это сделать
- вы можете сделать это с Win32 API
- любые создаваемые объекты должны быть помечены
coclass
(не interface
или source
; были также глобальные модули, которые, я полагаю, тоже можно создавать: я просто не уверен, определены ли они как коклассы
Покажите мне код
Можно прочитать информацию в библиотеке типов с помощью интерфейсов ITypeLib и ITypeInfo. Они могут быть созданы с помощью интерфейсов ICreateTypeLib и ICreateTypeInfo. Однако компилятор Microsoft IDL (MIDL), вероятно, является единственным приложением, которое когда-либо использовало ICreateType и ICreateTypeInfo.
Быстрый гугл открыл эту полезную страницу: Чтение библиотек типов с C ++ .
Он содержит просто код для начала работы. Чтобы узнать, стоило ли это чего-нибудь, я запустил облачный экземпляр Windows, взял все исходники и скомпилировал его.
В отличие от опций, упомянутых на сайте, я просто скомпилировал на windows с
cl.exe *.cpp /EHs ole32.lib oleaut32.lib
Ради интереса я скомпилировал материал для Linux (64 бит), используя MingW:
i586-mingw32msvc-g++ *.cpp -loleaut32 -lole32 -o Typelib.exe
Чтобы сохранить вам работу, я поместил zip-файл для скачивания , содержащий:
win32_Unicode.cpp - sources by René Nyffenegger
win32_Unicode.h
TestTypelib.cpp
Typelib.cpp
Typelib.h
VariantHelper.cpp
VariantHelper.h
TestTypelib.exe - binary compiled on windows
Тестовый прогон:
# linux: ./a.exe ~/.wine/drive_c/windows/system32/msxml6.dll
C:\Games\Stacko>TestTypelib.exe c:\Windows\System32\msxml6.dll
MSXML2: Microsoft XML, v6.0
Nof Type Infos: 149
IXMLDOMImplementation
----------------------------
Interface: Dispatch
functions: 8
variables: 0
Function : QueryInterface
returns : VT_VOID
flags :
invoke kind: function
params : 2
params opt : 0
Parameter : riid type = VT_PTR (VT_USERDEFINED (GUID)) in
Parameter : ppvObj type = VT_PTR (VT_PTR) out
Function : AddRef
returns : VT_UI4
flags :
invoke kind: function
params : 0
params opt : 0
(отрывок) и еще 15499 строк
Заключительный
Надеюсь, это станет хорошей отправной точкой для сканирования вашей системы на наличие установленных, создаваемых COM-компонентов