Plugins

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Plugins

Сообщение xqz_me » 30.05.2006 (Вт) 20:45

Подскажите, пожалуйста, полному чайнику как правиль сделать в программе, написанной на vb6, поддержку плагинов, какое доки лучше почитать по сабжу. Нужно чтобы плагин можно было писать на любом языке программирования, чтобы он (плагин) мог рисовать свой интерфейс на какойм-нибудь фрейме на форме. Соотвественно, количество плагинов заранее неизвестно, надо их как-то подключать в run-time.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.05.2006 (Вт) 21:00

1) Придумаваешь своя расширение (это очень важный шаг :) ) - например - mpf (My Plugin File).

2) На самом деле это Native DLL библиотека.

3) Т.е. её можно LoadLibrary а потом CallWindowProc.

4) Делаешь стандартный набор функций, который должен быть у каждого плугина.
5) Делаешь функцию авторизации (для обеих сторон), которая проверяет что плугин не левый, и что прога которая его к себе подключает тоже не левая.

6) Делаешь функцию PluginINFO которая возвращает кучу инфы о плугине (например какие окна он создаёт, автора, копирайты, депедсы и прочее -- тут дело твоей фантазии)

7) У тебя в проге должна быть PluginProc - функция обратного вызова - через которую все плугины будут общаться с твоей прогой.

Вобщем в таком духе.

Рекоммендую прочитать статью об изготовлении плугина к 3dmax'у - больше и вспомнить то ничего немогу, да и понравилось мне как там всё описано :D
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 30.05.2006 (Вт) 21:11

Спасибо, попытаюсь разобраться.

З.Ы. Подпись - угар. :lol:

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

Сообщение keks-n » 30.05.2006 (Вт) 21:12

Хакер
Результатом такого подхода будут баальшие трудности с созданием плагина на VB. И пожалуйста не называй их Native-термин не правильный


xqz_me
Делай так:
Пусть у тебя будет текстовый файлик со списком ProgID плагинов(причём они могут быть ActiveX EXE и ActiveX DLL), из которого ты их прочитаешь и сделаешь CreateObject, который тебе вернёт свежесозданный объект. Для объекта определи набор методов, который должен быть в каждом плагине. Передай объекту ссылки на объекты в твоей проге(формы классы), которые ему будут нужны, и запроси инфу о нём. Ну, как работать с объектами думаю учить тебя не надо :wink:

Результат: ты получаешь возможность написания плагинов на любом языке, что умеет создавать COM интерфейсы(т. е. почти на любом, включая VB, который не умеет создавать не-COM DLL)
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.05.2006 (Вт) 21:16

ИМХО, ничего из этого не выйдет, кроме как
ActiveX component can't create object

или

Automation error
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение keks-n » 30.05.2006 (Вт) 21:19

Хакер
Если их предварительно не зарегистрировать в системе, то конечно. Но изза избытка примеров по програмной регистрации компонентов, проблема сводится на нет
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.05.2006 (Вт) 21:21

Скачает глупый усер ДЛЛ-ку, засунет её в папку Plugins, получит ошибку - и забьёт на прогу ...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 30.05.2006 (Вт) 21:25

2 Хакер

EP работает в том числе и с ActiveX DLL, ну-ка попробуй "вызвать ошибку регистрации".

Странный стереотип -- если плагины, так только Native DLL :?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.05.2006 (Вт) 21:27

Дело каждого - но я считаю этот метод надёжнее чем DLL, хоть и сложнее и сам бы я так делать не стал...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение keks-n » 30.05.2006 (Вт) 21:31

BV
Взял бы и выложил тут свой модуль для работы с плагинами в качестве примера. И сколько повторять, что они не Native! Native это то, что не требует подсистемы, hal.dll и ntoskrnl.exe например :wink:
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.05.2006 (Вт) 21:46

Ха Ха Ха Ха :lol: :lol:


ну-ка попробуй "вызвать ошибку регистрации".



Как словом так и делом... даже пробовать ничего не понадобилось...
Вложения
scrshot_bv_error.rar
Screen Shot
(230.46 Кб) Скачиваний: 46
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение keks-n » 30.05.2006 (Вт) 21:59

Делаем плагины как ActiveX EXE, запускаем их перез подключением и они сами себя регистрируют :)
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 30.05.2006 (Вт) 22:14

Хакер писал(а):Как словом так и делом... даже пробовать ничего не понадобилось...


Ну не может такого быть :|
В какой момент произошла ошибка?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.05.2006 (Вт) 22:18

В момента клика по EXE файлы, т.е. при запуске
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 30.05.2006 (Вт) 22:23

А SSubTmr6.dll и ComCtl32.ocx зарегистрированны?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.05.2006 (Вт) 22:25

Я всё что нашёл ручками регнул... всё заработало
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 30.05.2006 (Вт) 22:31

А там есть файл - Reg_ALL.bat, догадываешься, зачем?

Насчёт плагинов - вероятность такой ошибки равна практически 0.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.05.2006 (Вт) 22:49

1) Запускл батник... не волнуйся...
2) А вот глупые усеры ой как боятся этих батников с "их чёрным экраном" :lol:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение Antonariy » 31.05.2006 (Ср) 8:45

Для объекта определи набор методов, который должен быть в каждом плагине.
А еще лучше определи интерфейс, который должны имплементировать плагины.
Лучший способ понять что-то самому — объяснить это другому.

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 31.05.2006 (Ср) 13:28

Тока не бейте :lol:
Поговорил с одним человеком, он сказал что достаточно подгрузить дллку и предоставить ей handle окна. В нём сама дллка сможет нарисовать себе интерфейс и обрабатывать события. Впринципе, мне большего, наверное, и не надо. :)

Отсюда возникают 2 вопроса:
1) Как подгрузить дллку
2) Как предоставить ей handle окна?
Можно получить ответ поподробней, с учтом того что я мало что в этом понимаю :D

З.Ы. [quote=keks-n]BV
Взял бы и выложил тут свой модуль для работы с плагинами в качестве примера.[/quote] :roll:

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

Сообщение keks-n » 31.05.2006 (Ср) 13:48

xqz_me
Чел видимо нифига не понимает в VB :) Он имеет ввиду что нужно написать обычную DLL (VB такие делать не умеет, мона тока ActiveX), сделать LoadLibrary, GetProcAdress, а потом по полученному указателю вызвать функцию из DLL, передав ей Form.hWnd. Тока такой подход нам не подходит совершенно:
1) Даже если мы напишем обычную DLL на VB(есть способ, но свяфзан с кучей багов), то мы:
а) не сможем её отлаживать в IDE
б) не сможем работать с объектами вообще
2) Проблема с вызовом по указателю(модуль правда есть)
3) Не сможем испрользовать преимущества доступа к объектной среде твоей программы.

Посему делаем ТАК:
1) Пишем ActiveX DLL
2) Кладём её в папку Plugins
3) Её имя должно соответствовать ProgID, т. е. для MyPlugIn.MainClass,
MyPlugIn.MainClass.dll (как в MS .NET Framework :) )
4) Из проги пробегаемся по всем DLL в папке Plugins regsvr32(или не 32 в некоторых виндах), после чего пытаемся выполнить CreateObject.

Если ошибки не было, то ты получаешь класс из DLL с плагином. После чего делай с ним усё, что хочешь-плагин загружен и готов к работе 8)

Таким образом плагины к твоей проге легко написать на VB, VC и Delphi, на асме придётся повозиться с IDispath, но это уже не твои проблемы 8)
Изображение

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 31.05.2006 (Ср) 14:14

Тыкс... Вообщем задача такая: сделать поддержку плагинов и конкретно заплагинить одну программу, написанную на C++. Чел, написавший программу не может скомпилить её как ActiveX DLL, т.к. для этого ему придётся её переписывать, а у него нет времени (он, кстати, действетельно нифига не понимает в VB). Если плагины такого типа нельзя делать на VB, Бог с ними, пусть их делают не на VB. Так что можно поподробней про реализацию описанного мной способа... И примерчик, если не трудно. :roll:

З.Ы. С LoadLibrary, GetProcAdress, Form.hWnd и классами сталкиваться не приходилось.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.05.2006 (Ср) 14:17

xqz_me, это то что я предлагал... примерчик щас постараюсь сделать...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение keks-n » 31.05.2006 (Ср) 14:27

xqz_me
Форма-тоже является классом :)

З. Ы. А сразу сказать не мог???
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.05.2006 (Ср) 14:37

Кстати вот как рас статья про это

http://www.vbstreets.ru/VB/Articles/66035.aspx
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 31.05.2006 (Ср) 14:53

Господа! Что вы тут колесо изобретаете!

Юзаем библу TypeLib.

Порядок действий такой.
1. Сканим дллки
2. загружаем через TypeLib
3. регим (на всяк)
4. получаем имя классов, ну , можна проверить на наличии определённого интерфеса
5. загружаем через CreateObject

ой-ля-ля
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.05.2006 (Ср) 14:59

Sebas, он имеет прогу (1: ) Она не может быть переписана и (2: ) она использует плагины через обычный вызов ф-ций по указателю.

Человеку при этом нужно пример такой организации работы...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 31.05.2006 (Ср) 16:34

примерчик щас постараюсь сделать...

Ы? :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.05.2006 (Ср) 16:38

xqz_me, что значит "Ы"? Наверное что не надо мне его делать?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 31.05.2006 (Ср) 16:41

Не, не это значит. :lol: Это значит, что я пребываю в тревожном ожидании и буду очень счастлив, когда смогу увидеть результат твоей плодотворной работы. :)

След.

Вернуться в Visual Basic 1–6

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

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

    TopList  
cron