Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.042 c
3-40958
GSV_
2003-10-17 08:31
2003.11.13
Специалистам по Oacle. Вопрос про snapshot


14-42108
Незнайка
2003-10-23 02:04
2003.11.13
Хотел узнать термин


1-41270
hepry
2003-10-31 14:38
2003.11.13
Правильная работа с ComboBox csDropDown


1-41230
md
2003-11-01 11:07
2003.11.13
прога - невидимка


14-41945
mm0
2003-10-20 14:21
2003.11.13
Помогите с кнопкой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский