Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.19;
Скачать: CL | DM;

Вниз

Любителям Forms in dll посвящяется   Найти похожие ветки 

 
Leonid Troyanovsky ©   (2006-10-28 23:46) [80]


> Ketmar ©   (28.10.06 23:33) [78]
> >http://www.softwarer.ru/macro.html  
> и что? нормально. сам такое же делал. %-)


Изложение Александра, скажем, весьма нестандартно.
Но, для себя уж давно отметил, что мыслит он верно.

--
Regards, LVT.


 
Пусик ©   (2006-10-28 23:48) [81]


> Суслик ©   (28.10.06 23:19) [73]
> > Leonid Troyanovsky ©   (28.10.06 23:17) [70] > Бо, какая
> это плугинизация, если ты не сможешь подключить> свое творение
> ни к cpp, ни к vb, ни к иначе писанному хосту.А такое вообще
> возможно? И вообще - это уже концептуальный спор - что считать
> плугином. Я все-таки говорил бы о том, что речь про плугинизацию
> своей программы - пусть кто-нить еще пишет мне плугины :
> )


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


 
DiamondShark ©   (2006-10-28 23:54) [82]


> нахрен, собс-но, разбивать exe.

1. для коллективной параллельной разработки.
1.1 для исключения необходимости таскать весь исходный код (или dcu), т.к. бОльшая часть этого кода, как правило, одновременно всем разработчикам не нужна, а для монолитной сборки обязательна.
2. для расширения функциональности без полной пересборки.
2.2. в том числе и сторонними разработчиками
3. для выборочной установки конечным пользователям только требуемой функциональности (хочешь Word монолитным ехе?)


 
Sergey Masloff   (2006-10-29 00:00) [83]

Leonid Troyanovsky ©   (28.10.06 23:40) [79]
Ну разделение не очень связаных функциональных модулей. У меня был сделан единый "интерфейсный" exeкоторый представлял собой просто хост для специализированных функциональных окон - там оформление счетов работа с банками отчетность - вобщем до фига их было. И далеко не всем все были нужны.
Интерфейс практически формировался из базы - администрато при установке задавал какие модули нужны какому пользователю и при логине из базы читалось и строилось меню тулбары и прочее.
 Ненужные модули не ставились вообще. Если появлялся новый модуль которого раньше вообще (на момент компиляции exe) и не предполагалось то клиенту отсылался сам модуль и скрипт для базы который при загрузке позволял программе подключить новый функционал.
 Вроде ничего все работало. Число клиентов мерялось тыщами. Число комбинаций модулей - сотнями (всего модулей пара десятков).
 Конечно это же можно было по-другому сделать но сначала это показалось самой удачной идеей ее и реализовал. Особо криминального ничего не встретилось хотя были сначала трудности которые решать пришлось.


 
Leonid Troyanovsky ©   (2006-10-29 00:06) [84]


> DiamondShark ©   (28.10.06 23:54) [82]


http://groups.google.com/group/fido7.ru.delphi/browse_frm/thread/58852c116fb80460/68ec522bdfc1c74f?#68ec522bdfc1c74f

--
Regards, LVT.


 
DiamondShark ©   (2006-10-29 00:06) [85]


> DiamondShark ©   (28.10.06 23:54) [82]

ну и по-мелочи там кое что...

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


 
Ketmar ©   (2006-10-29 00:08) [86]

>[85] DiamondShark(c) 29-Oct-2006, 00:06
>Вообще говоря, я был бы безмерно счастлив, если б единицей
>компиляции, загрузки и исполнения был бы паскалевский unit.
напиши. динамическая загрузка DCU вполне реальна. получишь пародию на Оберон. %-)


 
Суслик ©   (2006-10-29 00:10) [87]


> Leonid Troyanovsky ©   (28.10.06 23:40) [79]
> Сейчас меня беспокоит не столько bpl,
> сколько длл в классическом исполнении,

Почему тебя это беспокоит - по работе нужно? Или так, для общего знания?


 
Суслик ©   (2006-10-29 00:12) [88]


> Суслик ©   (29.10.06 00:10) [87]
> > Leonid Troyanovsky ©   (28.10.06 23:40) [79]
> > Сейчас меня беспокоит не столько bpl,
> > сколько длл в классическом исполнении,
> Почему тебя это беспокоит - по работе нужно? Или так, для
> общего знания?


Т.е. мне как бы твоя позиция не ясна - это плохо, но зачем-то нужно.


 
DiamondShark ©   (2006-10-29 00:20) [89]


> Leonid Troyanovsky ©   (29.10.06 00:06) [84]

Не убедительно.

На счёт удивления пп 20 Мб...
Сейчас подсчитал... Ну, у нас 18 Мб .NET сборок. Без картинок и third-party.
Нормальный объём кода для средненькой такой системки...


 
Leonid Troyanovsky ©   (2006-10-29 00:21) [90]


> Суслик ©   (29.10.06 00:10) [87]

> > Сейчас меня беспокоит не столько bpl,
> > сколько длл в классическом исполнении,
>
> Почему тебя это беспокоит - по работе нужно? Или так, для
> общего знания?


Для общего-ж, конечно, знания.

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

Видимо, прав был тот философ, который предупреждал,
что ложные воззрения умирают только с их носителями.
Хотя, конечно, есть и более гуманный вариант - они
умрут вместе с дельфи, или с win32.

--
Regards, LVT.


 
Суслик ©   (2006-10-29 00:26) [91]


> Leonid Troyanovsky ©   (29.10.06 00:21) [90]


> вместе с дельфи

не надо! дельфи не умрет :) 11ая версия обещает избавиться от многих ошибок. ждать недолго.


 
Leonid Troyanovsky ©   (2006-10-29 00:29) [92]


> DiamondShark ©   (29.10.06 00:20) [89]

> Нормальный объём кода для средненькой такой системки...


Не знаю, где сейчас Анатолий (был в Новосибирске).
Не знаю, чем он сейчас занимается.
Но, три (или четыре) года назад я завидовал Вове Аксенову,
что он мог зайти (да и зашел) на экскурсию к Толику
с баночкой малинового варенья.

Т.е., за три года много воды утекло.

Кстати, первый SQL (без UNION) на 20К я увидел у Анатолия.

--
Regards, LVT.


 
Sergey Masloff   (2006-10-29 00:33) [93]

По мотивам ссылки.
Толик конечно человек авторитетный но проблемы с линковкой и как раз на цифре 20 Мег у дельфи были и возможно есть сейчас.

Вопреки прикидкам это не 2 - 4 а всего лишь немногим более полутора миллионов строк кода. Без особых картинок.

Что автоматизируем - крупную финансовую компанию ;-) Всю деятельность- от прямой до учета съеденых сотрудникамив столовых салатов.

Но кстати со скоростью линковки проблем не было. То есть скажем 10 и 19.5 Мб собирались почти одинаково а 20.1 выдавал через минут 20 кряхтенья internal error


 
Sergey Masloff   (2006-10-29 00:34) [94]

Впрочем вышеописаные проблемы мы формами в dll я не решал;-)


 
Leonid Troyanovsky ©   (2006-10-29 00:54) [95]


> Sergey Masloff   (29.10.06 00:34) [94]

> Впрочем вышеописаные проблемы мы формами в dll я не решал;


Вот-вот.
На свете есть более насущные проблемы, чем те,
о которых я (и не только я) предупредил.

Короче, думаю, что более тема в раскрытии не нуждается.
Умный поймет, а дураку, кроме метлы, я б ничего и не доверял.

--
Regards, LVT.


 
Petr V.Abramov   (2006-10-29 01:37) [96]

> Leonid Troyanovsky ©   (29.10.06 00:54) [95]
похоже, у Вас религия такая... (:
прекрасно это работает, избавляет от кучи гимра. если даже где-то в потрохах по 4К на DLL утекает - да и хрен с ним, нормальный юзер больше 3-4 DLL не загружает обычно, при подходе ровно как у Sergey Masloff   (29.10.06 00:00) [83]
 "принцип разделяй и властвуй", или большую проблему подели на мелкие, а мелкие отдай решать детям


 
Petr V.Abramov   (2006-10-29 01:40) [97]

но действительно, при наличии .Net разговор принимает бессмысленный характер


 
Leonid Troyanovsky ©   (2006-10-29 01:53) [98]


> Petr V.Abramov   (29.10.06 01:37) [96]


> похоже, у Вас религия такая... (:

Эк тебя перевернуло.
Нет у меня религии, атеист я, позитивист, угу.

> прекрасно это работает, избавляет от кучи гимра. если даже
> где-то в потрохах по 4К на DLL утекает - да и хрен с ним,

Дык, пусть себе у тебя и течет, мы не против.

>  нормальный юзер больше 3-4 DLL не загружает обычно, при

И чего, устают грузить-то? Иль больше не дают?

> на мелкие, а мелкие отдай решать детям

А вот учить отца купатца нефиг, Декарт ты наш.

--
Regards, LVT.


 
Petr V.Abramov   (2006-10-29 01:59) [99]

> И чего, устают грузить-то? Иль больше не дают?
ни к чему им, не нужен рабочему человеку больший функционал, в наш век узкой специализации

> А вот учить отца купатца нефиг, Декарт ты наш.
да купайся ты как хочешь, мне-то что, Архимед хренов


 
Суслик ©   (2006-10-29 02:02) [100]

как сказал предалгатель-всем-удавиться Дима А. - ОИНЧ
т.е. отпишись и не читай. Класс! Зачем же бесполезные словобранки делать? А?


 
GrayFace ©   (2006-10-29 17:57) [101]

Спасибо за ссылку, очень полезено, но можно вкратце, какие, все-таки, проблемы возникают при формах в dll? В инициализации модулей, связвных с Forms.pas, вроде, ничего крименального нет, в финализации, вроде бы, тоже. И где в MakeObjectInstance может утекать память?
По статье:
Странно, что Loader может заблаговременно не загрузить user32.dll, по идее перекрестных ссылок нет и можно было бы таких ситуаций избегать.
Под словом "private lock", видимо, подразумивается сажание на объект синхронизации?


 
evvcom ©   (2006-10-30 11:16) [102]

> [101] GrayFace ©   (29.10.06 17:57)
> И где в MakeObjectInstance может утекать память?

Да не... она там не утекает. :) Просто при выгрузке dll должна вызваться FreeObjectInstance, а вот она не вызывается. Тоже как-то года 2 назад разбирался, чего это MemProof мемлики показывает? :(


 
Leonid Troyanovsky ©   (2006-10-30 13:34) [103]


> evvcom ©   (30.10.06 11:16) [102]

> > И где в MakeObjectInstance может утекать память?

> Да не... она там не утекает. :) Просто при выгрузке dll
> должна вызваться FreeObjectInstance, а вот она не


Вот, во FreeObjectInstance и не освобождается.
Для exe это пофиг, для dll - 4к

См. также
http://groups.google.com/group/fido7.ru.delphi/msg/c452abd43a7ca99e

Но, дело даже не в этом. Сколько еще подобных переменных таятся
в коде Forms и иже (и это кроме публичных Screen, PopupMenuList etc).
Специально-то для длл оный код не тестировали.
Т.е., вылезают эти грабли неожиданно.

Например, после появления TAction применявшие формы в длл
заметили, что оные действия не работают.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2006-10-30 14:23) [104]


> GrayFace ©   (29.10.06 17:57) [101]


> Странно, что Loader может заблаговременно не загрузить user32.
> dll, по идее перекрестных ссылок нет и можно было бы таких
> ситуаций избегать.

В большинстве случаев собс-ная длл будет грузиться гораздо
позже user32, advapi32 etc.
Но, возможны случаи, когда эта последовательность важна.
Я ранее по треду поминал D3 с инициализацией variant в System.
А ведь, иногда dll используют как юзеровские фильтры, и вполне
возможно, что привычного окружения там нет.

> Под словом "private lock", видимо, подразумивается сажание
> на объект синхронизации?

Это про то, что если уж определили блокировку, то озаботьтесь,
чтобы она была согласованной, с loader lock внизу иерархии?

Видимо, имеются ввиду те, которые внутри DllMain, как на рис 2.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2006-10-30 14:42) [105]


> GrayFace ©   (29.10.06 17:57) [101]

>  все-таки, проблемы возникают при формах в dll? В

Если кратко, то причины:

- дублирование кода и переменных не только RTL, но и
глобальных объектов Application, Screen, TPopupMenuList и т.д.

- в случае работы не дельфийском хосте - неработоспособность
Application.Idle, а также обработки препроцессных сообщений типа CM_*

Ну, а проблемы: самые разнообразные: начиная глюков тулбаров, меню
хинтов, вплоть до неспособности перемещаться по tab order.

Наверное, проще указать то, с чем проблем менее всего, т.е.
с формами, показываеммыми ShowModal.
Но, как я уже говорил, во-первых, тоже не без явных проблем,
а во вторых - с N количеством скрытых.

--
Regards, LVT.


 
ANB ©   (2006-10-30 15:45) [106]


> Leonid Troyanovsky ©   (30.10.06 13:34) [103]

+1.

Лично нарвался на проблемы при использовании DLL. Пытался по ссылкам через RTTI работать с объектами приложения (точнее - с одаковскими компонентами). Время от времени ловил AV.
Основная проблема - при использовании DLL, которая подключила VCL, мы получаем дублирование служебных областей памяти. И имеет кучу фокусов.
Если уж так нужно - BPL + галка рант-тайм пакетов. Тогда проблем нету. Тем более это рекомендует борланд.
ЗЫ. Софтварер - мой гуру. Ему я привык доверять. А сколько я пытался сделать по своему - столько потом переделывал по его совету, т.к. наступал на грабли.


 
GrayFace ©   (2006-10-31 11:40) [107]

Leonid Troyanovsky ©   (30.10.06 14:23) [104]
Точно. %) Хотя можно и больше 4к.

Leonid Troyanovsky ©   (30.10.06 14:42) [105]
Еще я заметил изменение порядка форм после Application.Minimize из dll. И в одном месте есть обращение к Application.MainForm без проверки на nil.

Но основные грабли решаемы. В чужом приложении можно попробовать хук WH_CALLWNDPROCRET и вызывать Application.Idle при отсутствии сообщений (в OnIdle Handled ставить false).


 
Leonid Troyanovsky ©   (2006-10-31 13:32) [108]


> GrayFace ©   (31.10.06 11:40) [107]

> Но основные грабли решаемы. В чужом приложении можно попробовать
> хук WH_CALLWNDPROCRET и вызывать Application.Idle при отсутствии
> сообщений (в OnIdle Handled ставить false).

Меня это совсем не возбуждает :)

А так, с пощью обычной dll можно сделать "плагин" хоть к блокноту,
даже без его кооперации. Если, конечно, ручками, VCLess.

--
Regards, LVT.



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

Текущий архив: 2006.11.19;
Скачать: CL | DM;

Наверх




Память: 0.69 MB
Время: 0.136 c
15-1162451743
StriderMan
2006-11-02 10:15
2006.11.19
Delphi + FreeBSD. Возможно ли?


1-1160567344
YOjik
2006-10-11 15:49
2006.11.19
Несрабатывает передача параметра с 1-го раза , почему?


15-1161802883
Real
2006-10-25 23:01
2006.11.19
MySQL - ПО для управления или дайте скачать MySQLCC


6-1150871336
Zilog
2006-06-21 10:28
2006.11.19
как определить активность порта?


15-1162193228
Иксик
2006-10-30 10:27
2006.11.19
Рутинг в Windows XP