Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизПлагины и СОМ Найти похожие ветки
← →
WondeRu (2003-10-23 09:43) [0]Хочу создать прогу, которая могла бы использовать плагины. Плагины - СОМ-объекты. Подскажите, как подключать такие плгины?
← →
Юрий Федоров (2003-10-23 09:49) [1]Я делаю так.
Некая tlb поставляется отдельным файлом и содержит интерфейс(ы), который должен реализовывать СОМ-объект.
СОМ-объект - inproc server реализует интерфейс, при этом CLSID у всех них разумеется разные. Регистрация плагина - просто добавление нового CLSID в список
← →
WondeRu (2003-10-23 09:56) [2]А не можете по подробнее?
← →
Юрий Федоров (2003-10-23 10:12) [3]программа хранит список зарегистрированных у себя CLSID например в реестре(или в ини-файле, не суть). При подключении плагина туда просто добавляется новый CLSID. Для того, чтобы активизировать плагин, объект создается по
CLSID (CreateComObject).
Чтобы получить CLSID по имени файла (dll) нужно , чтобы COM объект был зарегистрироваан в реестре. Дальше по реестру элементарно ищется CLSID, исходя из имени dll.
← →
Nikolay M. (2003-10-23 10:15) [4]
> Юрий Федоров © (23.10.03 09:49) [1]
А зачем tlb отдельно?
Btw, если брать пример с мелкомягких, так у них плагины (ИЕ, во всяком случае) через ConnectionPoint-ы организованы.
← →
REA (2003-10-23 10:17) [5]Распишите плз поподробнее Connection point технологию. Мне пока не надо, но для расширения кругозора любопытно.
← →
Юрий Федоров (2003-10-23 10:31) [6]>>>Nikolay M. © (23.10.03 10:15) [4]
Все равно ведь нужна библиотека типов для ConnectionPoint? Если вызывающая программа сама не является COM-сервером, то tlb где-то должна находиться? Либо если является, то tlb может быть внутри.
Или как?
← →
Nikolay M. (2003-10-23 10:45) [7]
> tlb может быть внутри
На самом деле меня почему-то и зацепили именно слова, что tlb дается отдельно. Подумал, может это какой глубокий смысл несет...
> REA © (23.10.03 10:17) [5]
Помнится, когда сталкивался, на мсдн, конечно, много чего было и, по-моему, на Королевстве дельфи (могу и ошибаться) чуть-ли не готовый пример внедрения в ИЕ своего пункта меню.
А так, поиск по "writing Internet Explorer plugin com server automation" в различных сочетаниях. Если найду статьи - кину.
← →
WondeRu (2003-10-23 11:51) [8]а если созать базовый интерфейс(остальные (плагины) будут потомками его) и через него общаться?
← →
REA (2003-10-23 11:51) [9]Не - мне статьи некогда читать. Мне главное в общем понять в чем прикол метода (не применительно к IE, а в целом).
Ну ладно - не буду напрягать.
← →
Юрий Федоров (2003-10-23 12:01) [10]>>WondeRu © (23.10.03 11:51) [8]
А какой смысл наследовать интерфейсы в данном случае?
Все равно программа ничего не знает о потомках и их методах.
Так что интерфейс должен быть единый
← →
me (2003-10-23 12:39) [11]Для упрощения работы с подключаемыми модулями в виде COM объектов очень удобно использовать COM Components Categories
← →
WondeRu (2003-10-23 12:47) [12]Iqqq - базовый интерфейс.
CLASS_qqq: TGUID = "{BE6BA4F8-508F-40FB-B0F6-FE8E9F9FDA64}";
....
Iqqq = interface(IUnknown)
["{2F6A2231-3465-4134-A9D1-7F4575A1D937}"]
procedure Connect; safecall;
procedure Method1; safecall;
procedure GetParams; safecall;
procedure SetParams; safecall;
end;
в плагине создаю
Interface1 = interface(Iqqq)
["{8FACD3E7-515D-4969-A32C-BDD0D28FC725}"]
end;
и гуид ["{8FACD3E7-515D-4969-A32C-BDD0D28FC725}"]
записываю в файл перечисления плагинов
в главной проге
вызываю
var
Iplg1,Iplg2 : Iqqq;
CLSID - читаю из файла гуидов
Iplg1 := CreateComObject(CLSID) as Iqqq;
ну и работаю с данным новым плагином
Теперь вопрос :
А БУДЕТ ЭТО РАБОТАТЬ????
← →
Юрий Федоров (2003-10-23 12:54) [13]Не будет.
Не путай IID и CLSID
← →
WondeRu (2003-10-23 12:54) [14]>me
COM Components Categories - чо за зверь такой в msdn чего-то сложно про него написано , можете в трех словах зачем он нужен и счем его едят
← →
WondeRu (2003-10-23 12:58) [15]>Юрий Федоров © (23.10.03 12:54) [13]
>Не будет.
>Не путай IID и CLSID
а если InterFaceConnect(...) c IID_Interface1 как-нибудь связать?
← →
nikkie (2003-10-23 13:44) [16]имхо, ConnectionPoints к теме не имеют никакого отношения. это технология COM, позволяющая создать аналог обработчиков событий.
отдельный tlb действительно не обязательно. но, например, type library продуктов MS Office находится в отдельных olb-файлах. другой вариант - MS многие интерфейсы декларирует в хедер-файлах, а type library просто отсутствует.
смысл отдельного tlb я вижу в следующем - в случае с плагинами type library нужна только разработчику плагина, а при работе приложения у юзера, нужды в ней нет.
← →
me (2003-10-23 14:18) [17]COM Components Categories - возможность группировать COM-объекты, а потом быстро считывать их список. Отпадают проблемы с ведением списков плагинов для различных аппликаций.
← →
WondeRu (2003-10-29 08:46) [18]Тогда отвлекусь от плагинов, поставлю задачу иначе.
Как загрузить любой СОМ-сервер, зная тока методы его интерфейсов?
Word же ОЛЕ грузит!
← →
REA (2003-10-29 09:53) [19]Загрузить куда? В более сложных случаях ты даже не знаешь на какой машине находится сервер.
← →
REA (2003-10-29 10:04) [20]CoLoadLibrary например грузит DLL.
← →
Romkin (2003-10-29 10:54) [21]2Юрий Федоров а не поделитесь ли списком методов интерфейса плагина? Какие именно там?
← →
Юрий Федоров (2003-10-29 10:56) [22]>>Romkin © (29.10.03 10:54) [21]
что то я ничего не понял.
← →
Romkin (2003-10-29 11:01) [23]Да не надо мудрить, технология простая:
1. Создаем библиотеку типов, в ней как минимум интерфейс плагина с его свойствами и методами. Я добавляю еще и интерфейс ядра. Без коклассов
2. Пишем собственно ядро - приложение, в нем создаем СОМ объект, реализующий интерфейс ядра. Для этого вышеуказанную tlb надо зарегистрировать и в библиотеке ядра использовать (у Type library тоже есть свойства). Ессно, в библиотеке ядра только кокласс, реализующий этот интерфейс
3. Пишем плагин - просто ActiveX library, tlb которой также использует эту библиотеку, и содержит только один кокласс.
ТАким образом, плагин знает об интерффейсе ядра, а ядро - о плагине. Ничего лишнего, и потомки интерфейса не нужны
← →
Romkin (2003-10-29 11:02) [24]2Юрий Федоров имеется в виду, какие методы реализует у тебя интерфейс плагина :)
← →
Юрий Федоров (2003-10-29 11:18) [25]>>Romkin © (29.10.03 11:02) [24]
у меня их как собак нерезанных )))
(скорее :-((( )
А технология плагинов прям такая, как ты написал.
Впрочем, я имел виду то же самое, может криво сформулировал
← →
Romkin (2003-10-29 11:58) [26]Я просто уточнил :)
Просто я пытаюсь набрать минимальный универсальный для плагина набор методов... Почти получается, может, чего и упустил.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.041 c