Страница: 1 |
Вопрос: Plug-in'ы | Добавлено: 24.07.05 07:11 |
Автор вопроса: ![]() |
Кому-нибудь известно о создании технологии плагинов на VB 6.0: методы, примеры? Пойдет все. |
Ответы | Всего ответов: 7 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 271202919 Вопросов: 56 Ответов: 837 |
Профиль | Цитата | #1 | Добавлено: 24.07.05 08:36 |
Выбираю все DLL из каталога с программой, загружаю каждую и пытаюсь найти в ней функцию (через API GetProcAddress) с заранее определенным жестко именем. Если нашлась - DLL считается моим плагином, если нет - выгрузить и забыть.
А набор вызываемых функций по идее одинаков у всех плагинов, и программа (основная) в курсе какие именно функции она ищет в DLL. Если даже и не так, то ничего не мешает тебе определить в плагине функцию наподобие GetFeatures, возвращающую список строк-названий поддержанных плагином процедур. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ICQ: 203660381 Вопросов: 29 Ответов: 205 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 24.07.05 08:53 |
А ДЛЛ можно так писать на VB?
Можно кусочек кода? ![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 271202919 Вопросов: 56 Ответов: 837 |
Профиль | Цитата | #3 | Добавлено: 24.07.05 11:46 |
Вот код, но только на ДЕлфи:
... type // Процедурные типы для хранения ссылок на функции плагинов TGetNProc=function:shortstring; TGetSProc=function:integer; TProcessProc=procedure(config:pointer; request:PRequest; var reply:PReply); TConfigProc=procedure(defcfg:PSysConfig; var config:pointer); TSaveLoadProc=procedure(inifile:pointer; var config:pointer); // Информация об отдельном плагине TPlugin=record Name:shortstring; // Полное название Filename:shortstring; // Имя файла Handle:integer; // Хэндл загруженной DLL CFGSize:integer; // Размер конфигурации в RAM ProcessProc: TProcessProc; // Адрес процедуры обработки ConfigProc: TConfigProc; // Адрес процедуры настройки LoadCFG,SaveCFG:TSaveLoadProc; // Адреса процедур чтения/записи cfg end; PPlugin=^TPlugin; // Список загруженных плагинов TPlugins=class(TList); ... var Plugins:TPlugins; sr:TSearchRec; lib:integer; pgetn:TGetNProc; pgets: TGetSProc; plugin:PPlugin; ... // Читаем плагины и создаем их список. Plugins:=TPlugins.Create; if FindFirst('*.dll',faAnyFile,sr)<>0 then begin ShowMessage('Hе найдено подключаемых модулей.'); Close; end; repeat lib:=LoadLibrary(PChar(sr.Name)); if lib<>0 then begin @pgetn:=GetProcAddress(lib, 'GetPluginName'); if @pgetn=nil then FreeLibrary(lib) // Hе плагин else begin New(plugin); @pgets:=GetProcAddress(lib, 'GetCFGSize'); plugin.Name:=pgetn; plugin.Filename:=sr.Name; plugin.CFGSize:=pgets; plugin.Handle:=lib; plugin.ConfigProc:=GetProcAddress(lib, 'Configure'); plugin.ProcessProc:=GetProcAddress(lib, 'Process'); plugin.SaveCFG:=GetProcAddress(lib, 'SaveCFG'); plugin.LoadCFG:=GetProcAddress(lib, 'LoadCFG'); Plugins.Add(plugin); end; end; until FindNext(sr)<>0; FindClose(sr) |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #4 | Добавлено: 24.07.05 12:45 |
Ищи книгу А. Гончарова "Мышление в стиле Visual Basic" (она в е-виде) - там
было описано, как делаются плагины на VB6. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 343368641 Вопросов: 17 Ответов: 686 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 24.07.05 14:18 |
этот вопрос не раз обсуждался на форуме...
в примерах есть примеры ![]() |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #6 | Добавлено: 24.07.05 18:18 |
http://www.vbnet.ru/samples/download.aspx?id=114 |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ICQ: 203660381 Вопросов: 29 Ответов: 205 |
Web-сайт: Профиль | Цитата | #7 | Добавлено: 25.07.05 04:19 |
2HACKER. Спасибо. Вроде то, что надо. |
Страница: 1 |
|