Текущий архив: 2004.05.23;
Скачать: CL | DM;
ВнизМодульное приложение в Delphi Найти похожие ветки
← →
Tomkat (2004-05-07 15:08) [0]Кто подскажет, как в Делфи сотворить модульное приложение? То есть в экзешнике оставить только ядро-обработчик, а формы, к примеру, держать в отдельных файлах и вызывать по мере необходимости. А то у меня экзешник уже под 5 мегабайт ...
← →
Mim1 © (2004-05-07 15:24) [1]Расположи формы внутри библиотек, компилируй проект с использованием bpl. По необходимости загружай библиотеки и выводи формы.
← →
TUser © (2004-05-07 15:33) [2]Или dll
← →
Mim1 © (2004-05-07 15:36) [3]Компилировать с использованием bpl надо для того чтобы внутри библиотек и exe не происходило дублироваание одинакового кода + это снимет ряд проблемм с глобальными переменными в vcl (screen,application). Так же можно сразу формы располагать внутри пакетов, загружать пакеты-плагины по мере необходимости(loadpackage), в процедуре регистрации пакета регистрировать класс формы-наследника в списке классов (такую форму можно будет использовать в любой момент, получив ссылку на класс и создав экземпляр формы).
← →
Mim1 © (2004-05-07 15:38) [4]TUser © (07.05.04 15:33) [2]
Ага, именно dll я и имел ввиду в ревом посте, dll - dinamic link library - библиотека. Прошу прощения если ввел в заблуждение.
← →
Семен Сорокин © (2004-05-07 15:39) [5]А то у меня экзешник уже под 5 мегабайт ...
Места не хватает? Или на дискету не влазит?
← →
Курдль © (2004-05-07 15:43) [6]
> А то у меня экзешник уже под 5 мегабайт ...
Ату "AsPack"ом" его! И будет полтора! У меня уж давно такие - и кушать не просят! :)
← →
Mim1 © (2004-05-07 15:45) [7]Семен Сорокин © (07.05.04 15:39) [5]
Мудулизация сложного приложения очень даже не плохое решение, это позвоит с большей легкостью обновлять программу, изменять и т.д. (хотя есть приложения в которых разбиение на иодули нецелесообразно).
← →
Tomkat (2004-05-07 15:45) [8]Если можно , побольше информации о BPL , что это и с чем его едят ?
← →
MU (2004-05-07 15:49) [9]При установке еще придется и BPL от Borland с собой таскать
← →
Mim1 © (2004-05-07 15:54) [10]BPL это так называемые пакеты. Borland Pckage Library. Бывают двух типов runtime и designtime (а так же их гибриды). Designtime пакеты в отличии от runtime могут содержать редакторы компонент и подобные вещи (те что могут понадобится во время разработки приложения). Приветду пример, у вас есть программа и библиотека (dll). Внутри программы находится несколько форм использующих разработанный вами TSuperEdit. Так же внутри dll также находится форма использующая тот же компонент. Возникает вопрос как проще всего использовать superedit и там и там не дублируя код компонента? Ответ - использовать пакет в которм находится этот код. При чем пакет будет использоваться как приложением так и библиотекой. Таже ситуация с vcl.
Создать пакет модно через меню файл -> new -> package
← →
Mim1 © (2004-05-07 15:57) [11]MU (07.05.04 15:49) [9]
причем размер пакетов + программы будет значительно больше 5 мб. Однако Если компилировать dll без использования пакетов настанет момент когда программа начнет занимать ничем необосновонное количество памяти дублируя компоненты и т.п. в памяти, вместо того чтобы использовать один экземпляр из пакета.
← →
Erik © (2004-05-07 16:14) [12]Вобщето для этого есть спецальные компоненты плагины, которые берут большую часть работы на себя. Например в JVCL имеются такие компоненты, но я их ниразу неиспользовал. Еще по ниету видел аналогичные вещи. Вобщем удобно, но дисциплинирует.
← →
Tomkat (2004-05-07 16:23) [13]//это позвоит с большей легкостью обновлять программу//
да, это как раз тот случай ....у меня есть нек опыт создания DLL, во только как в нее форму поместить ? с функцияим и процедурами работал ...
← →
Mim1 © (2004-05-07 16:39) [14]Я всетаки считаю что помещать в dll правильнее фрейм с контролами, а форму оставить в своем приложении. Обясняю почему. Если форма находится внутри плагина она должна уметь говорить приложению чтото вроде "я закрылась, библиотеку можно выгрузить". Если же фрейм находится на вашем окне, оно всегда может знать когда оно закрылось и когда нужно выгрузить библиотеку.
вот вас требуется следующее
-- exe
1) сделать форму с которая в конструкторе сможет принимать параметр "имя библиотеки"
2) реализовать в этой форме загрузку этой библиотеки, получение ссылки на класс фрейма.
3) научить эту форму при закрытии
a) уничтожать фрейм
б) выгружать библиотеку
-- dll
1) сделать фрейм (стндартным образом)
2) экспортировать процедуру возвращающую ссылку на класс этого фрейма
Если же по каким то причинам идея с фреймами вам не нравиотся можете посмотреть статью на этом сайте про "формы в dll".
← →
Mim1 © (2004-05-07 16:59) [15]Tomkat (07.05.04 16:23) [13]
Если хотите могу привести пример. (я недавно делал подобное)
← →
Tomkat (2004-05-07 17:26) [16]если можно ....
← →
Mim1 © (2004-05-07 18:11) [17]Ушло по почте
← →
Digitman © (2004-05-07 18:14) [18]
> Tomkat (07.05.04 15:08)
> формы, к примеру, держать в отдельных файлах
нафига ? данные форм и так содержатся в виде ресурсов, которые подгружаются по мере необходимости, и это полностью подконтрольно тебе ...
← →
Dimaxx © (2004-05-07 22:46) [19]Каждая новая форма в приложении (кроме первой) - это дополнительные 2-10 кб (в зависимости от начального кода). Если делать dll"ки - это 300 кб мусора на каждую dll"ку. Если у тебя 10 форм, то проще вариант "все-в-одном". Иначе в итоге у тебя все это будет весить стока, что ты не возрадуешься...
← →
Mim1 © (2004-05-07 23:00) [20]Dimaxx © (07.05.04 22:46) [19]
см Mim1 © (07.05.04 15:57) [11]
В тестовом примере отосланном Tomkat по почте exe занимает 15к, и dll еще 15. Все остальное находится в bpl. Однако мы получаем возможность модульно обновлять / изменять программу. Теперь чтобы добавить форму к проекту не надо перекомпилировать и отсылать пользователю 5ти мегобайтный файл, всесто этого можно отослать 20кб библиотеку.
← →
Mim1 © (2004-05-07 23:01) [21]Dimaxx © (07.05.04 22:46) [19]
см Mim1 © (07.05.04 15:57) [11]
В тестовом примере отосланном Tomkat по почте exe занимает 15к, и dll еще 15. Все остальное находится в bpl. Однако мы получаем возможность модульно обновлять / изменять программу. Теперь чтобы добавить форму к проекту не надо перекомпилировать и отсылать пользователю 5ти мегобайтный файл, всесто этого можно отослать 20кб библиотеку.
← →
Dimaxx © (2004-05-08 21:35) [22]А если там дельфя не стоит на машине - отсылай все bpl"ы в куче. Скока весить будет? Один vcl.bpl чего стоит. :)
← →
Mim1 © (2004-05-09 00:31) [23]Dimaxx © (08.05.04 21:35) [22]
bpl отсылается однократно
← →
Anatoly Podgoretsky © (2004-05-09 11:53) [24]Переход на DLL/BPL резко увелисит размер приложение, увеличит количество ошибок и возможно еще и будет DLL Hell, и наверняка будет. А сколько проблем будет в DLL из за разной RTTI и менеджера памяти.
← →
Romkin © (2004-05-09 17:23) [25]А как насчет ActiveX library? Понятно, что размер приложения увеличивается. Но появляется модульность, для больших проектов это весьма удобно
← →
Anatoly Podgoretsky © (2004-05-09 17:28) [26]Romkin © (09.05.04 17:23) [25]
ActiveX отдельный вопрос
← →
Dimaxx © (2004-05-09 21:33) [27]Нафиг, я если я наваяю прогу весом 300 кило, то мне проще отправить ее, чем высылать 18 кб + пяток метров мусора. К тому же, если мне надо отправить только одну прогу. Даже если не одну, то проще выслать независимый экзешник, чем такой изврат.
← →
OlegGashev © (2004-05-09 21:45) [28][25] Romkin © (09.05.04 17:23)
Тогда уж лучше не ActiveX, a COM.
← →
Mim1 © (2004-05-09 22:07) [29][27] Dimaxx © (09.05.04 21:33)
А кто тебя имел ввиду? :) О 300к вообще разговор не велся. Модульным стоит делать действительно серьезное приложение а если у тебя "изварт" размером 300к то каАанечно остовляй все как есть.
В своей работе я столкнулся с такой ситуацией - есть приложение которое сделано по оговоренному здесь принципу. Т.е. есть простенький exe и есть много различных модулей. Модули постоянно разработываются командой програмистов. Головное приложение умеет выкачивать модули из сети и подключать их. Этот процесс прозрачен для пользователя.
[24] Anatoly Podgoretsky © (09.05.04 11:53)
Волков боятся в лес не ходить.
Думается что модули используются в многих местах системы например cpl можно вполне назвать модулями(хотя и несколько отличающимися от умамянутых здесь). Действительно при написани модулей на Delphi возникают некоторые проблеммы, которые были здесь упомянуты, однако при правильном подходе можно с легкостью их избежать. Как говорится, "вы не любите котов?, вы просто не умеете их готовить". Я признаю что ситуации когда можно обойтись без их использования значительно больше чем тех в которых возникать такая необходимось. Тем не менее возможен и такой вариант построения приложения. В любом случае конечный выбор остается за програмистом.
← →
Dimaxx © (2004-05-11 00:37) [30]Так вот сразу бы и написал, что за приложение и что оно делает. Тогда конечно проще так. Но для небольших приложений лучше независимый экзешник. :-)
← →
Mim1 © (2004-05-11 03:53) [31][30] Dimaxx © (11.05.04 00:37)
Так вроде в (07.05.04 15:08) сказано. Типо "приложение у меня сложное, более 5 метров, хочу сдлеать его модульным".
← →
Tomkat (2004-05-11 09:19) [32]Спасибо Mim1 за пример, соберу мозги в кучу после праздников и попробую разобраться :-)
Страницы: 1 вся ветка
Текущий архив: 2004.05.23;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.034 c