Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Плагины и СОМ   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.037 c
1-41247
Pomashok
2003-10-31 22:33
2003.11.13
Хинт


3-40987
AlexS
2003-10-16 16:36
2003.11.13
БД & OLE


4-42311
Demetrius
2003-09-17 19:03
2003.11.13
WinInet


3-40867
pok
2003-10-21 11:01
2003.11.13
Переход от D6 на D7, проблема с отчотами....


3-40831
Deedlit
2003-10-22 07:12
2003.11.13
TOleException при работе с БД MS Access