Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Единый TApplications для Dll и Exe без Bpl


Страницы:   1 2

Gu ©   (2011-08-09 06:43:00) 

В большинстве источников в инете пишут, что при инициализации Dll из приложения необходимо передать в эту dll TApplication и TScreen приложения (последний кстати некоторые советуют не использовать, т.к. это приводит к ошибкам типа cannot assign tfont to tfont в модуле graphics). Но все равно при этом одного tApplication не получится, т.к. приложение и dll используют разные экземпляры tapplication и это приводит к куче проблем и лечить это советуют только сборкой длл и ехе на одной версии дельфей с включением рантайм пакетов (bpl), но это очень неудобно, т.к. с приложением все эти пакеты надо таскать.

Вот тут есть интересный пример одного китайца(?), как получить типа общего control для приложения и длл через атомы (общий контрол.пас): http://hi.baidu.com/buckayro/blog/item/c93259f1357bfbc47931aab0.html

Может еще какие способы есть и кто что об этом думает, может в новых версиях дельфей что то новое появилось, чтобы  это реализовать (%тема вопроса%)? Читал еще, что можно както типа мини api внедрять в приложение, но реализации не видел. Буду благодарен за любые идеи.


DiamondShark   (2011-08-15 13:08:00) [1]


> Не обо мне речь. А о "кладовщиках". Да и о менеджерах тоже.  :)

Кладовщик по е-мылу получает ссылку на ClickOnce инсталяцию, тыкает в неё, и больше на горизонте не возникает.


Gu   (2011-08-14 01:30:00) [2]

2 han_malign

не могли бы вы залить куданить небольшой рабочий пример, из вашего кода [17] мне не совсем ясно что там и как (или хотябы полнее привести код модуля инициализации в длл, т.к. неясно откуда там берется tapplication). И после этих манипуляций на основном окне приложения можно будет создать панель (из dll, как спрашивал в начале)?


Германн   (2011-08-14 00:32:00) [3]


> DiamondShark ©   (12.08.11 11:01) [22]
>
>
> > Германн ©   (12.08.11 01:12) [14]
> > А собирать-то кто будет?
>
> Можно подумать, вы ни одного инсталятора с выбором компонентов
> не видели.
> Наверное, даже МС Офис ни разу в жизни не ставили.
>

Не важно что видел я. Не обо мне речь. А о "кладовщиках". Да и о менеджерах тоже. :)


Дмитрий Белькевич   (2011-08-13 19:13:00) [4]

Устали от багрепортов... Но - вроде удалось комбинацию безглючную найти. Это только то, чего касаемся. К счастью, работу с вордом и эксплорером удалось выкосить из софта.


Дмитрий Белькевич   (2011-08-13 19:10:00) [5]


> Расскажи это Microsoft, Oracle, Borland-CodeGear-Embarcadero,
>  они будут приятно удивлены


Угу, помню - помню - эмбеддид борландовский вместо одного экзешника (или дллки) - гора дллок и манифестов, которые на разных операционках по-разному не работают.


Anatoly Podgoretsky   (2011-08-12 17:00:00) [6]

> Дмитрий Белькевич  (12.08.2011 09:34:15)  [15]

Word 2003 - 12 мегабайт, так это Ворд


DiamondShark   (2011-08-12 11:01:00) [7]


> Германн ©   (12.08.11 01:12) [14]
> А собирать-то кто будет?

Можно подумать, вы ни одного инсталятора с выбором компонентов не видели.
Наверное, даже МС Офис ни разу в жизни не ставили.


Dennis I. Komarov   (2011-08-12 10:51:00) [8]

В длл надо выносить отдельные, логически завершенные, подпрограммы. Например модуль криптографии, некий GUI который можно будет юзать посторонним софтом и т.п.
ИМХО


Игорь Шевченко   (2011-08-12 10:42:00) [9]


> Монолитный экзешник - минимум головной боли для техсаппорта
> и для юзеров


Расскажи это Microsoft, Oracle, Borland-CodeGear-Embarcadero, они будут приятно удивлены


han_malign   (2011-08-12 10:09:00) [10]


> (пресловутый ShareMem)

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


han_malign   (2011-08-12 09:54:00) [11]


> только после приравнивания их локальным экземпляры все равно разные.

- экземпляры одинаковые - код дублируется, но "инлайнирование кода" вроде не считается тяжким грехом...
А вот если менеджеры памяти разные(пресловутый ShareMem) - тады может быть ой...

Ну и естественно надо помнить, что это не последние глобальные переменные в VCL...


han_malign   (2011-08-12 09:41:00) [12]


> передать в эту dll TApplication и TScreen

- в DLL надо передавать Application. Handle, при присваивании которого второму экземпляру Application тот аттачится к первому и все путем(почти)...

Forms.pas:
procedure TApplication.SetHandle(Value: HWnd);
begin
 if not FHandleCreated and (Value <> FHandle) then
 begin
   if FHandle <> 0 then UnhookMainWindow(CheckIniChange);
   FHandle := Value;
   if FHandle <> 0 then HookMainWindow(CheckIniChange);
 end;
end;
.................................
procedure TApplication.WndProc(var Message: TMessage);
   .............................  
   for I := 0 to FWindowHooks.Count - 1 do
     if TWindowHook(FWindowHooks[I]^)(Message) then Exit;
     ..........................
       CM_WINDOWHOOK:
         if wParam = 0 then
           HookMainWindow(TWindowHook(Pointer(LParam)^)) else
           UnhookMainWindow(TWindowHook(Pointer(LParam)^));

.................................
procedure TApplication.HookMainWindow(Hook: TWindowHook);
var
 WindowHook: ^TWindowHook;
begin
 if not FHandleCreated then
 begin
   if FHandle <> 0 then
     SendMessage(FHandle, CM_WINDOWHOOK, 0, Longint(@@Hook));
 end else
 begin
   FWindowHooks.Expand;
   New(WindowHook);
   WindowHook^ := Hook;
   FWindowHooks.Add(WindowHook);
 end;
end;


Ega23   (2011-08-12 09:40:00) [13]


> Такой экзешник, кстати, еще нужно попробовать сделать...


Ну если обфускатор натравить, то легко.

А активное использование dll - это разве только в системе плагинов, это я понять могу.


Дмитрий Белькевич   (2011-08-12 09:34:00) [14]

Монолитный экзешник - минимум головной боли для техсаппорта и для юзеров. А кого сейчас удивишь 45-ю мегабайтами? Такой экзешник, кстати, еще нужно попробовать сделать...


> переходить на дотНЕТ


Ага, причем на последнюю версию. И таскать с собой 300 метров 'счастья'. Для каждого калькулятора.


Германн   (2011-08-12 01:12:00) [15]


> DiamondShark ©   (10.08.11 16:34) [11]
>
>
> > Ega23 ©   (09.08.11 09:03) [4]
> > Я вот совершенно не понимал, откуда это маниакальное желание
> > запихнуть всё на свете в dll?
>
> Модульность, однако.
>
> 1. Можно собирать рабочие места без лишнего функционала.
>

А собирать-то кто будет?
А в конце-концов всё это дерьмо придётся разгребать техподдержке. :(
Прям как в анекдоте про сантехников. :)


_Юрий   (2011-08-11 19:45:00) [16]


> QAZ   (11.08.11 11:13) [12]


С точностью до наоборот


QAZ   (2011-08-11 11:13:00) [17]


> переходить на дотНЕТ

чтобы получать

> ехешник на сорок пять мегабайт

и

> стопицотгигабайтный инсталяционный пакет

?


DiamondShark   (2011-08-10 16:34:00) [18]


> Ega23 ©   (09.08.11 09:03) [4]
> Я вот совершенно не понимал, откуда это маниакальное желание
> запихнуть всё на свете в dll?

Модульность, однако.

1. Можно собирать рабочие места без лишнего функционала. Например, кладовщику не нужны модули аналитики, а менеджеру по продажам не нужны модули выписки заборных листов и печати транспортных этикеток.

2. Можно оперативно обновлять багофичи. Например, для исправления очепятки в форме выписки кассового ордера надо скопировать только модуль "Касса" размером триста килобайт, а не монолитный ехешник на сорок пять мегабайт.

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

...

N. PROFIT!!!

Хотя, таки да, пакеты для модульности удобнее.
А ещё лучше не страдать пассивной некрофилией, и переходить на дотНЕТ.


QAZ   (2011-08-09 13:24:00) [19]


> Зачем dll нужно что-то знать о главной форме?


> А что, dll ща модно? Особенно те, которые должны знать о
> том, кто и загрузил?

афтар видимо изобретает щикарную систему плагинов


Andy BitOff   (2011-08-09 13:19:00) [20]

А что, dll ща модно? Особенно те, которые должны знать о том, кто и загрузил?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо