| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > Возможности получения информации о типах |
| Автор: GSasha 25.3.2008, 22:27 | ||
| Привет всем! Изучаю СOM, и вот прочитал в RSDN интересную статейку о способах перехвата вызовов методов и-фейса, для этого нужно иметь достаточно инфы о нём. Возможность получения информации о типах, методах и т. д. интерфейса имеется с помощю методов IDispatch напр.
Но как можно ли получить инфу о методах с typeLib не IDispatch based интерфейса в runtime!!! Пока я остановился на мысли о ручном получении пути к компоненту (точнее его TypeLib) с помощю поиска в реестре по CLSID!!! Есть ли более порядочный способ получения ITypeLib имея какой ниб интерфейс? Буду благодарен за поддержку! |
| Автор: Rififi 25.3.2008, 22:34 |
| typelib создается только для disp- или dual-интерфейса. исключительно для поддержки скриптовыми языками. если интерфейс не-, то никакой информации о типах нет. |
| Автор: GSasha 25.3.2008, 22:43 |
| Как же тогда поступать с иф-м IUnknown based? Есть ли возможность достать инфу в таком случае? |
| Автор: Rififi 25.3.2008, 22:59 | ||
© Dale Rogerson "Inside COM" Списки типов - практически то же самое. |
| Автор: GSasha 25.3.2008, 23:28 | ||
Дело в том, что я пробую генерить vtbl в runtime (для IDispatch based уже работает ), чтобы сгенерить vtbl для не IDispatch based необходимо же откуда - то програмно выгребать информацию о методах, количестве параметров и т.д.. QI, AddRef, Release - no problem, а остальное пока не достал. PS я клиенту предоставляю свою __CoCreateInstance и возвращаю клиенту свой ppVtbl на pVtbl на сгенерированную мною Vtbl |
| Автор: GSasha 27.3.2008, 21:45 | ||
Не правда, так как type library создана не для IDispatch, а для RPC поэтому в каждом COMпоненте присутствуют все данные о типах!!! Добавлено через 6 минут и 7 секунд Любой компонент можно использовать выгребая информацию о типах, стоит только в реестре получить путь к компоненту ( по CLSID\InprocServer32\... ) и получить ITypeLib, а дальше каждый тип детализировать и выбрать нужный с легкостю позволяет ITypeInfo |
| Автор: izekia 28.3.2008, 09:30 |
| GSasha, если посмотреть реализацию IDispatch в ATL, то можно обнаружить класс CComTypeInfoHolder, который используется по умолчанию собственно можно обратить внимание на реализацию метода GetTI только что обратил внимание на подзаголовок а чем LoadTypeLib не устраивает? |
| Автор: GSasha 28.3.2008, 13:43 | ||||||
Уже усраивает, Я искал способ получения ITypeInfo имея в наличии только traget interface( возможно только для IDispatch based ), для не-... LoadTypeLib остается
вот и все! |
| Автор: GSasha 29.3.2008, 22:55 |
| . |