Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.044 c