Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.049 c
1-1118066808
TORT
2005-06-06 18:06
2005.06.29
Tstring


4-1115483450
Galiaf
2005-05-07 20:30
2005.06.29
Как сделать так чтобы при запуске проги появлялась иконка в трее?


14-1117599953
emfw
2005-06-01 08:25
2005.06.29
Стоимость АИС


4-1115290216
DrFaust
2005-05-05 14:50
2005.06.29
События Windows


1-1117885913
heady
2005-06-04 15:51
2005.06.29
программа, вечно висящая в трее





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