![]() |
|
![]() ![]() ![]() |
|
GSasha |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 23.3.2008 Где: Ukraine Репутация: нет Всего: нет |
Привет всем!
Изучаю СOM, и вот прочитал в RSDN интересную статейку о способах перехвата вызовов методов и-фейса, для этого нужно иметь достаточно инфы о нём. Возможность получения информации о типах, методах и т. д. интерфейса имеется с помощю методов IDispatch напр.
Но как можно ли получить инфу о методах с typeLib не IDispatch based интерфейса в runtime!!! Пока я остановился на мысли о ручном получении пути к компоненту (точнее его TypeLib) с помощю поиска в реестре по CLSID!!! Есть ли более порядочный способ получения ITypeLib имея какой ниб интерфейс? ![]() Буду благодарен за поддержку! ![]() |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 1 Всего: 36 |
typelib создается только для disp- или dual-интерфейса. исключительно для поддержки скриптовыми языками.
если интерфейс не-, то никакой информации о типах нет. |
|||
|
||||
GSasha |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 23.3.2008 Где: Ukraine Репутация: нет Всего: нет |
Как же тогда поступать с иф-м IUnknown based?
Есть ли возможность достать инфу в таком случае? |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 1 Всего: 36 |
© Dale Rogerson "Inside COM" Списки типов - практически то же самое. Это сообщение отредактировал(а) Rififi - 25.3.2008, 23:00 |
|||
|
||||
GSasha |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 23.3.2008 Где: Ukraine Репутация: нет Всего: нет |
Дело в том, что я пробую генерить vtbl в runtime (для IDispatch based уже работает ), чтобы сгенерить vtbl для не IDispatch based необходимо же откуда - то програмно выгребать информацию о методах, количестве параметров и т.д.. QI, AddRef, Release - no problem, а остальное пока не достал. PS я клиенту предоставляю свою __CoCreateInstance и возвращаю клиенту свой ppVtbl на pVtbl на сгенерированную мною Vtbl |
|||
|
||||
GSasha |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 23.3.2008 Где: Ukraine Репутация: нет Всего: нет |
Не правда, так как type library создана не для IDispatch, а для RPC поэтому в каждом COMпоненте присутствуют все данные о типах!!! ![]() Добавлено через 6 минут и 7 секунд Любой компонент можно использовать выгребая информацию о типах, стоит только в реестре получить путь к компоненту ( по CLSID\InprocServer32\... ) и получить ITypeLib, а дальше каждый тип детализировать и выбрать нужный с легкостю позволяет ITypeInfo ![]() |
|||
|
||||
izekia |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 5.12.2007 Репутация: нет Всего: 3 |
GSasha,
если посмотреть реализацию IDispatch в ATL, то можно обнаружить класс CComTypeInfoHolder, который используется по умолчанию собственно можно обратить внимание на реализацию метода GetTI только что обратил внимание на подзаголовок а чем LoadTypeLib не устраивает? Это сообщение отредактировал(а) izekia - 28.3.2008, 09:39 |
|||
|
||||
GSasha |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 23.3.2008 Где: Ukraine Репутация: нет Всего: нет |
Уже усраивает, ![]() Я искал способ получения ITypeInfo имея в наличии только traget interface( возможно только для IDispatch based ), для не-... LoadTypeLib остается
вот и все! ![]() |
||||||
|
|||||||
GSasha |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 23.3.2008 Где: Ukraine Репутация: нет Всего: нет |
.
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |