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

Вниз

Любителям 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.66 MB
Время: 0.053 c
15-1162324851
Колдун
2006-10-31 23:00
2006.11.19
Сохранение TreeView в HTML-формате


15-1162457313
dr Gonzo
2006-11-02 11:48
2006.11.19
Нужен ли софтверной фирме открытый форум?


3-1158567582
Fin
2006-09-18 12:19
2006.11.19
Восстановить удалённую таблицу в Access 2000


1-1160398467
CDfdfgf
2006-10-09 16:54
2006.11.19
Tms "xlsadapter" - что это?


15-1162213360
Synset
2006-10-30 16:02
2006.11.19
CVS





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