Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Модульное приложение в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.048 c
7-1078333405
Makhanev A.S.
2004-03-03 20:03
2004.05.23
User Session Change...


1-1083844743
Talle
2004-05-06 15:59
2004.05.23
Компоненты TXMLDocument и TWebBrowser


1-1083838438
killer
2004-05-06 14:13
2004.05.23
Раскраска StringGrid-а


14-1083398784
Вопрошающий
2004-05-01 12:06
2004.05.23
Новый монитор


1-1084268514
akiro
2004-05-11 13:41
2004.05.23
Работа с событиями.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский