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

Вниз

runtime пакеты   Найти похожие ветки 

 
Vitalik ©   (2005-06-07 19:20) [0]

Привет!
Задача изначально у меня следующая. Разрабатывается система, состоящая из множества модулей (EXE). При этом различные модули могут использовать одни и те же ресурсы (например, иконки), диалоги, функции. В связи с этим появилось желание не компилировать к каждому модулю свою копию этих ресурсов, а обойтись одной копией, чтобы все программные модули их использовали. Ну например, общие функции можно поместить в DLL. Некоторые диалоги реализовать в виде COM и ActiveX объектов.
Потом я подумал, что раз вся система разрабатывается на Delphi, то нельзя ли использовать в ряде случаев пакеты?
На самом деле, то что отдельные функции у меня в dll, а диалоги в виде COM и ActiveX меня в принципе вполне устраивает (тем более что в некоторых случаях COM модули выполнены в виде exe файлов).
Но к числу совместно используемых ресурсов системы также относится и графика –иконки 16х16 (и не только), которые помещаются в ImageList. А потом этот ImageList указываеться в параметрах TreeView, менюшках и т.п.
Вообще, конечно, можно поместить иконки в ту же DLL и загружать их в run-time в ImageList. Но интерфейс-то я разрабатываю в designtime и мне было бы удобно видеть иконки во времени разработки.
Так вот можно ли в принципе создать runtime пакет, добавить в него DataModule с ImageList, заполнить ImageList иконками, откомпилировать, а потом подключать этот пакет при разработке модулей и работать с этим ImageList и иконками, которые в нем содержаться? То есть пакет не должен компилировать вместе с exe-модулями, он должен оставаться отдельно, как dll а все модули его бы использовали.
И небольшая ремарка. Те модули, пакеты, по моему замыслу, не должны прикомпилироваться к exe модулям должны быть отдельно (т.е. runtime), а вот vcl60.bpl и прочие designtime пакеты должны оставаться designtime, т.е. включаться (в необходимом количестве) в exe модули. (это я к тому, что уже столкнулся с тем, что если в опциях проекта на кладке Packages установить влажок Build with runtime packages, то vcl не включается в exe файл).
Надеюсь я более или менее внятно изложил суть вопроса, если что – задавайте вопросы, я уточню.


 
Суслик ©   (2005-06-07 19:41) [1]

пользуешь runtime пакеты и смиряешься с тем, что в этом случае rtl60.bpl, vcl60.bpl и пр. пакеты delphi ты должен поставлять отдельно, т.к. они тоже runtime пакеты. Насколько я знаю мешать runtime и НЕruntime пакеты нельзя.


 
Vitalik ©   (2005-06-07 20:22) [2]

хех, а жаль... Да ну, тогда смысл почти весь теряеться в использовании runtime пакетов. Он, правда, остаеться в том, что runtime пакеты можно изменять (в известных пределах) без перекомпилирования использующих его модулей...


 
Суслик ©   (2005-06-07 20:34) [3]


> Да ну, тогда смысл почти весь теряеться в использовании
> runtime пакетов

почему?
распространяй вместо с прогой требуемые bpl.


 
Anatoly Podgoretsky ©   (2005-06-07 20:51) [4]

Суслик ©   (07.06.05 19:41) [1]
Можно, настройка гибкая.


 
Суслик ©   (2005-06-08 10:38) [5]


>  [4] Anatoly Podgoretsky ©   (07.06.05 20:51)

поведай?
я аналогичный вопрос уже 2 раза задавал, нигде ответа не видел.


 
Anatoly Podgoretsky ©   (2005-06-08 10:50) [6]

Я не использую пакеты, но я знаю, что в BPL можно вынести только нужное, как смотри сам по документации.


 
evvcom ©   (2005-06-08 10:52) [7]

Ставишь в опциях проекта Build with ..., становится доступным внизу Edit со списком run-time пакетов, выбираешь то, что надо. Сам не пробовал, но думаю, что так.


 
Суслик ©   (2005-06-08 10:57) [8]


>  [6] Anatoly Podgoretsky ©   (08.06.05 10:50)


как? я доку всю знаю. Нет там такого.


>  [7] evvcom ©   (08.06.05 10:52)


> Сам не пробовал, но думаю, что так.

нет это не так. У них сделано так: если пакет А runtime, то если ты даже не укажешь явно в целевом приложении пакет Б, который использует пакет А (т.е. Б находится в секции requires пакета А), пакет Б становится все равно runtime.


 
Anatoly Podgoretsky ©   (2005-06-08 11:02) [9]

Так зачем же ты тогда используешь пакет А, сам себе противоречишь.


 
Суслик ©   (2005-06-08 11:07) [10]


>  [9] Anatoly Podgoretsky ©   (08.06.05 11:02)


Анатолий, ты в вопросе, который обсуждается разобрался?

Повторю, суть вопроса:

как сделать так, чтобы можно было часть пакетов использовать как runtime, а часть пакетов, чтобы линковались статически в момент компиляции?

Исходя из этого где противоречие?


 
evvcom ©   (2005-06-08 11:18) [11]

Собственно, а зачем такая заморочка? Если А юзает Б, то все равно этот Б придется тащить вместе с А. И какой тогда смысл код классов из Б еще и статически линковать к проекту? И как в таком случае в А передавать объекты созданные в коде, использующем статически код из Б, если А умеет работать с Б только как с run-time пакетом? Каламбурчик получается.


 
Суслик ©   (2005-06-08 11:19) [12]


>  [11] evvcom ©   (08.06.05 11:18)

что-то я совсем запутался кто-на что отвечает :)

Представим себе, что я хочу иметь runtime пакеты, но не хочу тащить отдельно vcl60.bpl, а хочу, чтобы он тащился вмесле с exe.

Я так понял из [7], что ты знаешь как это сделать?


 
Чапаев ©   (2005-06-08 11:31) [13]

> Представим себе, что я хочу иметь runtime пакеты, но не хочу
> тащить отдельно vcl60.bpl, а хочу, чтобы он тащился вмесле с
> exe.
Ставишь галочку Build with ... и удаляешь vcl60.bpl из списка. Работает.


 
Суслик ©   (2005-06-08 11:31) [14]


>  [13] Чапаев ©   (08.06.05 11:31)

неправда. :)
попробуй запуситься на машине, где не уставнолен дельфи :)
также можешь последить за event log.


 
Чапаев ©   (2005-06-08 11:41) [15]

> неправда. :)
Давно дело было, забыл значицца.

Вообще я всовывал все "общеупотребительные" dcu"шки в свой runtime-пакет и ставил его единственным runtime-пакетом приложения. Всё работает.

Только этот dpk нужно компилировать из консоли, потому что IDE при первой попытке компиляции ругается, что пакет не содержит ссылки на пакеты vcl & rtl, а при второй попытке кричит "ну что ты мне за фигню паришь??? Эти модули уже вкомпилированы в vcl & rtl". ;-)


 
evvcom ©   (2005-06-08 11:42) [16]


> Я так понял из [7], что ты знаешь как это сделать?

Скорее нет, чем да. И думаю, что это просто невозможно, если пакет находится в requires.
Представь, что твой пакет использует vcl60.bpl как пакет, а в exe статически линкуется этот код. Теперь ты создаешь объект из своего пакета, который создает или обрабатывает объекты из пакета vcl60.bpl. Теперь в свой пакет передаешь на какую-то обработку/анализ/использование объект, созданный из статически прилинкованного vcl60. В результате объект будет обрабатываться в коде совершенно другого класса. Т.е. если использовать пакеты, то должны использоваться и все зависимые пакеты во всем приложении, чтобы и глобальные объекты Application, Screen и прочие были тоже общими.


 
Суслик ©   (2005-06-08 11:47) [17]


>  [16] evvcom ©   (08.06.05 11:42)

да и я про тоже, о чем спорим тогда?


 
evvcom ©   (2005-06-08 11:50) [18]

Не спорим, а разбираемся... :)


 
Суслик ©   (2005-06-08 11:52) [19]


> Не спорим, а разбираемся... :)

точно.

Вообще жаль, что у них мало документации по устройству пакетов. Все как-то нет времени покопать это дело. Будет возможность на newsgroups надо будет спросить. Там точно ответят.



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

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

Наверх




Память: 0.52 MB
Время: 0.026 c
14-1117440868
Огшу
2005-05-30 12:14
2005.06.29
WLAN, дальность полета ?


14-1117204178
Сатир
2005-05-27 18:29
2005.06.29
У кого есть фотка команды Microsoft 78-го года ?


4-1115162748
uhhax
2005-05-04 03:25
2005.06.29
Удалить определенную запись в TreeView спомощью TVM_DELETEITEM


1-1118065199
Gashish
2005-06-06 17:39
2005.06.29
Перенос модели в из 3d max в Delphi


1-1117688549
john_mag
2005-06-02 09:02
2005.06.29
обработчик MouseToCall