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

Вниз

Зачем формы размещают в *.dll   Найти похожие ветки 

 
Разведка   (2013-08-14 11:44) [0]

Что если не размещать формы в dll при большой программе?


 
DVM ©   (2013-08-14 11:45) [1]


> Зачем формы размещают в *.dll

Чтоб жизнь медом не казалась


 
Разведка   (2013-08-14 11:48) [2]

Я что хотел выяснить то это лучше делать при большом проекте или можно обойтись?


 
sniknik ©   (2013-08-14 12:08) [3]

это лучше вообще не делать... никогда.


 
stas ©   (2013-08-14 13:13) [4]

Разведка   (14.08.13 11:48) [2]
Вопрос из ряда: "Что если я не буду в своем проекте использовать dll"
Смотря для каких целей тебе в проекте dll.


 
Ega23 ©   (2013-08-14 13:30) [5]


> Я что хотел выяснить то это лучше делать при большом проекте
> или можно обойтись?


1. Это геморрой.
2. Многие вообще не понимают, зачем нужны dll.


 
sniknik ©   (2013-08-14 13:41) [6]

> Вопрос из ряда: "Что если я не буду в своем проекте использовать dll"
совсем нет, т.к. на этот вопрос ответ будет - ты не сможешь... практически в любом проекте используется куча dll-ек, не взирая на желание "использовать или  не использовать".


 
stas ©   (2013-08-14 13:47) [7]

sniknik ©   (14.08.13 13:41) [6]
Согласен ).
Я имею ввиду,  думаю и автор, написание собственных dll для использования в своем проекте.


 
Dennis I. Komarov ©   (2013-08-14 14:41) [8]

- обновлять нужно не все приложение, а только одну форму
- использовать диалоги в различных приложениях (например LogOn форма)
- предоставлять UI другим приложениям


 
Обычный порошок   (2013-08-14 14:53) [9]

это лучше вообще не делать... никогда.

это можно делать всегда и тебе за это ничего не будет.

function bla_bla_bla : integer;
begin
создать форму в длл;
показать форму в длл;
если модалрезалт равно ок зен
 result := какое-то значение
иначе
result := -1;
end;


 
Ega23 ©   (2013-08-14 14:55) [10]


> - обновлять нужно не все приложение, а только одну форму


Ага. А потом обновится десяток форм и все 10 dll обновлять?


> - использовать диалоги в различных приложениях (например
> LogOn форма)


Что мешает просто вкомпилить эту форму (компонент)?


> - предоставлять UI другим приложениям


Единственно-весомый аргумент. Но тут нужно крайне тщательно подходить к вызовам, типам данных и т.п. Геморроя не меньше, а то и больше.


 
DVM ©   (2013-08-14 14:57) [11]


> Обычный порошок   (14.08.13 14:53) [9]


> это можно делать всегда и тебе за это ничего не будет.

Модальные конечно можно, но при этом DLL будет включать еще раз весь код VCL и размер ее сильно вырастет. И так столько раз сколько у нас таких DLL с формами. Лучше уж пакеты тогда.


 
Обычный порошок   (2013-08-14 15:00) [12]

понеслась душа в рай.....
началось с того, что будет больно и будет гемор. всегда.

когда стало ясно, что ни боли ни гемора нет, стали пугать объемами файлов.


 
DVM ©   (2013-08-14 15:02) [13]


> Обычный порошок   (14.08.13 15:00) [12]


> когда стало ясно, что ни боли ни гемора нет

с немодальными еще какой


 
Обычный порошок   (2013-08-14 15:12) [14]

ну то есть гемор есть всегда?


 
DVM ©   (2013-08-14 15:24) [15]


> Обычный порошок   (14.08.13 15:12) [14]

Я про всегда не говорил, это как раз ты про всегда сказал и привел в пример почему то именно модальную форму, что есть один из случаев использования форм в длл. С немодальными такой фокус не пройдет, т.е всегда использовать не получится беспроблемно.


 
Ega23 ©   (2013-08-14 15:25) [16]


> ну то есть гемор есть всегда?


Да. как минимум - на поддержке вызовов dll (если динамическая загрузка). В ловле багов, ежели где-то stdcall или cdecl какой-нить забыл проставить.
С ShareMem-ом, либо с передачей всяких строк туда-сюда.
Очень много лишней работы. Выигрыш - непонятно в чём.

Иногда, осознанно - да, можно и форму туда запихнуть. На практике - мне всего раза 3 это было действительно нужно.


 
Обычный порошок   (2013-08-14 15:29) [17]

ну то есть гемор есть не всегда, можно пхать формы в длл и вам за это ничего не будет?


 
Dennis I. Komarov ©   (2013-08-14 15:32) [18]


> Ага. А потом обновится десяток форм и все 10 dll обновлять?

да... причем еще не факт что все сразу.


 
Обычный порошок   (2013-08-14 15:33) [19]

кстати я могу щас накидать несколько примеров с формами без длл, в которых будет еще тот гемор (я гарантирую это. 146 %).

может тогда формы и без длл использовать нельзя?


 
Dennis I. Komarov ©   (2013-08-14 15:39) [20]


> Что мешает просто вкомпилить эту форму (компонент)?

Ничего, но потом с собой таскать его + поддержка для различных дельфей.
Т.е. на вкус и цвет фломастеры разные...

> Единственно-весомый аргумент. Но тут нужно крайне тщательно
> подходить к вызовам, типам данных и т.п. Геморроя не меньше,
>  а то и больше.

Не спорю, всегда надо аккуратно....


 
DVM ©   (2013-08-14 15:44) [21]


> Обычный порошок   (14.08.13 15:33) [19]


> кстати я могу щас накидать несколько примеров с формами
> без длл, в которых будет еще тот гемор

Валяй.


 
Dennis I. Komarov ©   (2013-08-14 15:50) [22]


> DVM ©   (14.08.13 15:02) [13]
>
> > Обычный порошок   (14.08.13 15:00) [12]
>
>
> > когда стало ясно, что ни боли ни гемора нет
>
> с немодальными еще какой

Например...


 
Обычный порошок   (2013-08-14 16:06) [23]

Валяй.

валяю. (но оглядываясь на ниже)
ежели где-то stdcall или cdecl какой-нить забыл проставить.

немодальная форма.
caFree
переменная не обнуляется.
в результате косяк.

пример не дурнее того самого ежели что выше.

навалял?


 
Dennis I. Komarov ©   (2013-08-14 16:07) [24]

Кстати, кто пояснит?
Есть указатель x: PAnyRecInfo. Пусть в приложении есть кусок памяти, в котором храниться инфа от записи.
При вызове stdcall функции из dll AnyFunc(x), как инфа попадет в dll?


 
Ega23 ©   (2013-08-14 16:08) [25]


> ну то есть гемор есть не всегда, можно пхать формы в длл
> и вам за это ничего не будет?


Гемор есть всегда. Для того, чтобы форму запихнуть в dll и аккуратно всё прописать, строк кода и затраченного времени будет больше, чем просто форму вкомпилить в проект.
Посему вопрос: а стоит ли?


 
Ega23 ©   (2013-08-14 16:11) [26]


> При вызове stdcall функции из dll AnyFunc(x), как инфа попадет
> в dll?

Указатель - через стек, ну а унутре уже x^. ...
И опять-таки приколы с типами данных в PAnyRecInfo.


 
Обычный порошок   (2013-08-14 16:14) [27]

Гемор есть всегда. Для того, чтобы форму запихнуть в dll и аккуратно всё прописать, строк кода и затраченного времени будет больше, чем просто форму вкомпилить в проект.
Посему вопрос: а стоит ли?


и при чем здесь конкретно длл, если гемор есть всегда?
формы использовать вообще нельзя.


 
Dennis I. Komarov ©   (2013-08-14 16:20) [28]


> Посему вопрос: а стоит ли?

Это же совсем другой вопрос. Цели не были озвучены, как и функционал :)


 
Ega23 ©   (2013-08-14 16:21) [29]


> и при чем здесь конкретно длл, если гемор есть всегда?
> формы использовать вообще нельзя.


Использовать можно всё. Вопрос в целесообразности. В большинстве случаев пихать форму в dll нецелесообразно. Как правило этим грешат начинающие разработчики, которые всё на свете готовы в dll запихнуть, покупаясь на "не надо будет всё приложение билдить".
Я могу понять, когда проект билдится полчаса. Но у нас-то это десятки секунд максимум.


 
Ega23 ©   (2013-08-14 16:23) [30]


>  Но у нас-то это десятки секунд максимум.


"у нас" - это у delphi-разработчиков.


 
Dennis I. Komarov ©   (2013-08-14 16:28) [31]


> Указатель - через стек, ну а унутре уже x^. ...

Не, ты не понял... AnyFunc с какой памятью будет работать?


 
Ega23 ©   (2013-08-14 16:30) [32]


> Не, ты не понял... AnyFunc с какой памятью будет работать?


Ну у приложения и dll адресное пространство же одно и то же. Другое дело, что менеджеры памяти могут быть разные.


 
Dennis I. Komarov ©   (2013-08-14 16:30) [33]


> И опять-таки приколы с типами данных в PAnyRecInfo.

А чего в них прикольного? :) Вот все API в них и ничего...


 
Ega23 ©   (2013-08-14 16:33) [34]


> А чего в них прикольного? :) Вот все API в них и ничего.
> ..


Дык там и string не найдёшь, везде пчары с длиной. Копирование каждый раз, счётчики ссылок... Ну гемор же.


 
Dennis I. Komarov ©   (2013-08-14 16:39) [35]


> Дык там и string не найдёшь, везде пчары с длиной. Копирование
> каждый раз, счётчики ссылок... Ну гемор же.

да брось... а в dll со стрингами вообще не красиво


 
DVM ©   (2013-08-14 16:43) [36]


> Dennis I. Komarov ©   (14.08.13 15:50) [22]
>
> > DVM ©   (14.08.13 15:02) [13]
> >
> > > Обычный порошок   (14.08.13 15:00) [12]
> >
> >
> > > когда стало ясно, что ни боли ни гемора нет
> >
> > с немодальными еще какой
>
> Например...

Начнем с того, что в DLL и в основной программе в каждой свой RTTI и имеем проблемы из этого вытекающие в виде потенциальной несовместимости даже одних и тех же типов между собой.
Аналогично менеджер памяти в каждой свой.
Для нормальной работы немодальной формы нужен объект TApplication, который как то нужно передать форме в Dll, но опять же читаем про RTTI.
Будут проблемы с фокусом, ресайзом (если форма встраивается в другую) да много чего.
Все решаемо конечно, но зачем спрашивается такой геморрой?


 
Ega23 ©   (2013-08-14 16:48) [37]


> да брось... а в dll со стрингами вообще не красиво


Внутри - сколько угодно. На приёме-передачи параметров экспортируемых функций - там да, нельзя. Точнее, можно, но с плясками вокруг ShareMem.


 
sniknik ©   (2013-08-14 16:52) [38]

вся ветка пример почему так лучше никогда не делать (одна из причин) - советами ... достанут, при любом вопросе, как только заикнешься о формах в dll.
при существующих вполне "спокойных" в этом отношении решениях реальных задач.

> Ну гемор же.
и еще какой...
http://delphimaster.net/view/15-1365767063/
там в последнем посте, оказалось вполне стандартный способ для некоторых "плагинных" компонент для передачи "строк" (выглядят как строки, в доках строки, но не нифига строки... ).


 
DVM ©   (2013-08-14 16:54) [39]


> Обычный порошок   (14.08.13 16:06) [23]


> немодальная форма.
> caFree
> переменная не обнуляется.
> в результате косяк.
>
> пример не дурнее того самого ежели что выше.
>
> навалял?

Это пример того как не надо делать, а именно использовать глобальные переменные.
При нормальном использовании форм согласно документации проблем нет.
При использовании немодальных форм в dll проблема уже есть изначально.


 
Dennis I. Komarov ©   (2013-08-14 17:00) [40]


> Начнем с того, что в DLL и в основной программе в каждой
> свой RTTI и имеем проблемы из этого вытекающие в виде потенциальной
> несовместимости даже одних и тех же типов между собой.
> Аналогично менеджер памяти в каждой свой.
> Для нормальной работы немодальной формы нужен объект TApplication,
>  который как то нужно передать форме в Dll, но опять же
> читаем про RTTI.
> Будут проблемы с фокусом, ресайзом (если форма встраивается
> в другую) да много чего.
> Все решаемо конечно, но зачем спрашивается такой геморрой?
>

ммм, я про Show vs ShowModal, про внутренности это отдельно...



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2014.02.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.003 c
15-1376130585
MonoLife
2013-08-10 14:29
2014.02.02
Вот такие желптушки.


2-1364394906
8-bytes
2013-03-27 18:35
2014.02.02
приложение в трехзвенке


15-1377018892
Rouse_
2013-08-20 21:14
2014.02.02
Лицензия на опенсорс


2-1364475755
ttt
2013-03-28 17:02
2014.02.02
Интерфейсы


15-1376365256
Ротанг
2013-08-13 07:40
2014.02.02
Как настроить почту в Windows 8





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский