Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Plug-in'ы Добавлено: 24.07.05 07:11  

Автор вопроса:  Softer | Web-сайт: hware.org.ua | ICQ: 203660381  
Кому-нибудь известно о создании технологии плагинов на VB 6.0: методы, примеры? Пойдет все.

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 ViktorZ



ICQ: 271202919 

Вопросов: 56
Ответов: 837
 Профиль | | #1 Добавлено: 24.07.05 08:36
Выбираю все DLL из каталога с программой, загружаю каждую и пытаюсь найти в ней функцию (через API GetProcAddress) с заранее определенным жестко именем. Если нашлась - DLL считается моим плагином, если нет - выгрузить и забыть.

А набор вызываемых функций по идее одинаков у всех плагинов, и программа (основная) в курсе какие именно функции она ищет в DLL. Если даже и не так, то ничего не мешает тебе определить в плагине функцию наподобие GetFeatures, возвращающую список строк-названий поддержанных плагином процедур.

Ответить

Номер ответа: 2
Автор ответа:
 Softer



ICQ: 203660381  

Вопросов: 29
Ответов: 205
 Web-сайт: hware.org.ua
 Профиль | | #2
Добавлено: 24.07.05 08:53
А ДЛЛ можно так писать на VB?
Можно кусочек кода? :)

Ответить

Номер ответа: 3
Автор ответа:
 ViktorZ



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
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 24.07.05 12:45
Ищи книгу А. Гончарова "Мышление в стиле Visual Basic" (она в е-виде) - там
было описано, как делаются плагины на VB6.

Ответить

Номер ответа: 5
Автор ответа:
 Barsik



Разработчик Offline Client

ICQ: 343368641 

Вопросов: 17
Ответов: 686
 Web-сайт: barsik.newmail.ru
 Профиль | | #5
Добавлено: 24.07.05 14:18
этот вопрос не раз обсуждался на форуме...
в примерах есть примеры :)

Ответить

Номер ответа: 6
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #6 Добавлено: 24.07.05 18:18
http://www.vbnet.ru/samples/download.aspx?id=114

Ответить

Номер ответа: 7
Автор ответа:
 Softer



ICQ: 203660381  

Вопросов: 29
Ответов: 205
 Web-сайт: hware.org.ua
 Профиль | | #7
Добавлено: 25.07.05 04:19
2HACKER. Спасибо. Вроде то, что надо.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам