Получить имлементаторов

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Получить имлементаторов

Сообщение Antonariy » 01.06.2007 (Пт) 12:45

Есть dll с неким интерфейсом и есть несколько dll с классами, которые его реализуют. Как получить список progid этих классов из системы? Есть ли вообще такая инфа в реестре?
Лучший способ понять что-то самому — объяснить это другому.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.06.2007 (Пт) 13:29

Нету.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 01.06.2007 (Пт) 13:46

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.06.2007 (Пт) 14:00

К тому же, не у любого класса, зарегистрированного по ProgID, может быть TLB.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 01.06.2007 (Пт) 14:11

Так что единственный способ - CoCreateInstance а потом QueryInterface. Я, правда, не помню, CreateInstance, вроде бы, даёт возможность сразу получить нужный интерфейс и можно обойтись 1-им вызовом.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.06.2007 (Пт) 14:45

Даёт.
Изображение

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.06.2007 (Пт) 15:00

Понял, перечисление всех библиотек типов не наш метод. Лучше уж в базу писать все возможные progid и проверять их наличие через createobject.
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList