Re: bpl, как плагин и связь с основной программой
От: matvienko Украина http://www.aquapack.com/ http://www.PlainCAD.com/
Дата: 09.11.09 16:46
Оценка: 1 (1)
Мой совет — когда уровни взаимодействия плагинов и основной программы заранее нельзя четко определить и взаимодействие может быть очень сложным, то в этом случае, на мой взгляд, лучшее решение — встраивать в программу какую нибудь скриптовую машину, например тот же FastScript и выполнять "позднее связывание" на скриптах, которые сами по себе могут быть очень просты.

При таком подходе нужно экспортировать в скриптовую машину возможные интерфейсы (классы, объекты, переменные, функции) основной программы. Загружаемые плагины должны при инициализации выполнять экспорт своих интерфейсов в скриптовую машину, которая конечно же должна быть общей у программы и плагинов. После чего можно загрузить и выполнить скрипт инициализации программы, который и выполнит необходимое связывание функционала. В этом случае нет необходимости на этапе проектирования кропотливо прорабатывать интерфейсы — все можно будет сделать потом и, главное, тонко "подстроить" программу непосредственно на клиенте.

vvu>Exe-шник вырос до 7 метров и решил я дальнейший функционал делать плагинами. Остановился на bpl после прочтения статьи Дмитрия Полщанова "Еще раз о Plugin's…", Трофимова Игоря "Подгружаемые модули (plugins) в Delphi" и других, и долгих раздумий и взвешиваний между dll и bpl.

vvu>Вопрос такой: можно ли, как-то заставить bpl видеть и работать с уже загруженным (главной прогой) модулем данных
vvu>Буду очень благодарен за помощь в этом вопросе, т.к. уж жутко лень реализовывать интерфейсы или хотя бы, если уж никак без них не обойтись, пожалуйста, подскажите их необходимый минимум.
bpl, как плагин и связь с основной программой
От: vvu  
Дата: 07.11.09 22:14
Оценка:
Свет, всем!
Exe-шник вырос до 7 метров и решил я дальнейший функционал делать плагинами. Остановился на bpl после прочтения статьи Дмитрия Полщанова "Еще раз о Plugin's…", Трофимова Игоря "Подгружаемые модули (plugins) в Delphi" и других, и долгих раздумий и взвешиваний между dll и bpl.
Вопрос такой: можно ли, как-то заставить bpl видеть и работать с уже загруженным (главной прогой) модулем данных
Буду очень благодарен за помощь в этом вопросе, т.к. уж жутко лень реализовывать интерфейсы или хотя бы, если уж никак без них не обойтись, пожалуйста, подскажите их необходимый минимум.

Ниже, на всякий случай, более-менее детально описал, что и как:
Мой плагин (bpl) содержит одну форму в которой реализуется некоторый функционал.
bpl я загрузил и форму показал, но через ошибку доступа к БД. Как передать коннект через интерфейсы я понял из статьи, но ситуация немного другая:
в bpl я юзаю модуль из основной проги с описанием класса, который при создании заполняет некоторые поля значениями из БД, через FIBDataSet в DataModule (DM). Т.е., когда стартует программа, то DM создается автоматом и открывает запрос и при создании моего класса в программе поля нормально заполняются значениями из БД:

  FNo   := DM.ds1.DataSet.FieldByName('NO').AsInteger;
  FName := DM.ds1.DataSet.FieldByName('NAME').AsString;

Но, когда класс креатится из формы в bpl, то DM = nil и конечно возникает AV.

В статье вычитал: "При загрузке пакета в память автоматически устанавливаются связи с уже загруженными пакетами". Но к модулям, я так понял, это, видимо, не относится. И, если DM (с FIBDatabase1 и кучей ДатаСетов) вынести в отдельный пакет, например, DM.bpl, то мой плагин.bpl сможет работать с Модулем Данных без реализации интерфейсов для коннекта и запросов (наборов данных, которые они возвращают)
Re: bpl, как плагин и связь с основной программой
От: Softwarer http://softwarer.ru
Дата: 08.11.09 11:06
Оценка:
Здравствуйте, vvu, Вы писали:

Да, разделяемые модули следует также вынести в пакет. Вообще, в нормальной программе с плагинами в основном exe должен быть абсолютный минимум кода.

Кроме того, чувствуется необходимость глубже понять механику — как модули связываются между собой, как это работает в случае плагинов.
Re[2]: bpl, как плагин и связь с основной программой
От: vvu  
Дата: 08.11.09 20:23
Оценка:
Здравствуйте, Softwarer, Вы писали:

S>Да, разделяемые модули следует также вынести в пакет. Вообще, в нормальной программе с плагинами в основном exe должен быть абсолютный минимум кода.

А у меня сейчас все в одном exe. Буду потихоньку выносить в отдельные bpl, спасибо. Хотя была надежда, что можно малой кровью обойтись.

S>Кроме того, чувствуется необходимость глубже понять механику — как модули связываются между собой, как это работает в случае плагинов.

А не посоветуете, куда нырнуть, чтобы понять
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.