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

Вниз

Вопрос проектам, использующим пакеты(packages)?   Найти похожие ветки 

 
Megabyte ©   (2006-11-02 13:21) [0]

Сделал программу, кот. подгружает пакет динамически. Соответственно, основной проект делал с установкой  build with runtime packages.
При запуске на другом компе программа поругалась, что не может найти библиотеку rtl.bpl, кот. используется в пакете.
1)Мне теперь надо с собой таскать все пакеты, кот. использую в проекте?
2)Если да, то где они должны хранится?


 
MetalFan ©   (2006-11-02 14:27) [1]

запуздырь в windows\system32 например.


 
Megabyte ©   (2006-11-02 17:35) [2]

Каким образом сделать так, чтобы программа искала эти стандартные библиотеки/пакеты в определенной/заданной мною директории?
Хочу хранить их централизованно в одной, созданной мною, папке!


 
Ketmar ©   (2006-11-02 17:45) [3]

таки добавить путь в path.


 
Суслик ©   (2006-11-02 18:46) [4]

я всегда держу библиотки рядом с exe.
пока проблем не было.


> 2)Если да, то где они должны хранится?

читай описание алгоритма поиска dll при загрузке с помощью LoadLibrary.
Для bpl тоже самое. Про LoadLibrary читай в msdn.microsoft.com


 
Loginov Dmitry ©   (2006-11-02 20:26) [5]

Megabyte ©   (02.11.06 17:35) [2]
Хочу хранить их централизованно в одной, созданной мною, папке!


Если пакеты стандартные (vclXX.bpl, rtlXX.bpl и т.п.), то лучше записывать их сразу в System32. Свои пакеты храни в собственном каталоге.


 
Суслик ©   (2006-11-02 21:25) [6]


> лучше записывать их сразу в System32

никогда не мог понять чем это лучше :(


 
Loginov Dmitry ©   (2006-11-02 23:32) [7]

Суслик ©   (02.11.06 21:25) [6]
никогда не мог понять чем это лучше :(


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


 
Суслик ©   (2006-11-02 23:49) [8]


> Loginov Dmitry ©   (02.11.06 23:32) [7]


> (если каждый будет поставлять вместе со своими прогами еще
> и кучу стандартных bpl-лок, то представляете, сколько будет
> хлама на жестком диске компьютера пользователя!)


кому какое дело, что творится в каталоге, который *пользователь* отвел для моей программы? или по твоему мнению 1-2 мб на жетском диске есть проблема для современных винтов?

не убеждает.


 
RASkov   (2006-11-03 03:38) [9]

[7] и [8] неверно и в то же время оба правы.

Неверно:
хранить в System32 - я могу написать длл, бпл с каким-нибудь стандартным названием  - моя прога работает остальные курят.
хранить в папке с прогой - не оптимально с размерами (копейка рубль бережет)
Верно:
хранить в System32 - один файл для кучи прог использующих именно эту версию файла
хранить в папке с прогой - не думать о других. Прога точно работать будет как надо.

Исходя из этого можно сделать кучу выводов как например такой - создать каталог куда складывать свои библиотеки. В реестре указать путь и все проги этого автора знают где искать нужное.
Но и здесь проблем будет не меньше.

ЗЫ тонкости неучтены ибо расписывать все сами понимаете... Типа винда (XP) может использовать "длл с одинаковым именем" для отдельных прог свою версию этой длл...


 
Loginov Dmitry ©   (2006-11-03 07:36) [10]

RASkov   (03.11.06 3:38) [9]
Неверно:
хранить в System32 - я могу написать длл, бпл с каким-нибудь стандартным названием  - моя прога работает остальные курят.


Курить [5]


 
evvcom ©   (2006-11-03 09:08) [11]

> [9] RASkov   (03.11.06 03:38)
> Неверно:
> хранить в System32 - я могу написать длл, бпл с каким-нибудь
> стандартным названием  - моя прога работает остальные курят.

За это либо стрелять, либо просто в помойку такую прогу. Без ИМХО.


 
Сергей М. ©   (2006-11-03 09:32) [12]


> Сделал программу, кот. подгружает пакет динамически. Соответственно,
>  основной проект делал с установкой  build with runtime
> packages


Состояние опции BwRTP для хост-проекта в этом случае не играет никакой роли.


 
DrPass ©   (2006-11-03 10:40) [13]


> Состояние опции BwRTP для хост-проекта в этом случае не
> играет никакой роли.

Еще как играет. Если программа динамически грузит BPL-пакет, она ДОЛЖНА быть собрана с установленной BwRP. Иначе программист огребет почти все те же грабли, что и при использовании DLL-плагинов.


 
Сергей М. ©   (2006-11-03 10:50) [14]


> DrPass ©   (03.11.06 10:40) [13]



> ДОЛЖНА


> Иначе программист огребет


Интересный аргумент) ...


> DLL-плагинов


О плагинах у автора нет ни слова.

И вообще - мало ли зачем автор загружает эту bpl !
Может он тут же ее выгружает ?)

Сборка с RTP была бы нужна, если бы требовалось обеспечить общий экз-р RTL для  взаимодействующих модулей. А если такое требование не выдвигается, то состояние опции BwRTP при сборке взаимодействующих проектов может быть произвольным.


 
DrPass ©   (2006-11-03 11:38) [15]


> если бы требовалось обеспечить общий экз-р RTL для  взаимодействующих
> модулей

Оно в любом случае требуется. Можно придумать миллионы случаев, когда приложение будет нормально работать с двумя экземплярами RTL. Точно так же можно глубоко забить на освобождение создаваемых объектов, и все равно оно будет нормально работать. Но это же не значит, что так нужно делать. Программа не должна таскать за собой мегабайты продублированного кода.


 
Сергей М. ©   (2006-11-03 11:56) [16]


> Программа не должна таскать за собой мегабайты продублированного
> кода


С этим абсолютно согласен.


> Оно в любом случае требуется


Нет, не в любом. А только в тех случаях, когда оно действительно небходимо.


> Можно придумать миллионы случаев, когда приложение будет
> нормально работать с двумя экземплярами RTL


Может здесь как раз один из тех случаев ? Автор же не уточняет... Зато уточняет, что хост-модуль собран с RTP. Ну а раз так, то следовало бы уточнять состояние этой опции и для bpl-проекта, вот только тогда можно былобы о чем-то предметно говорить, в т.ч. и о небходимости общей RTL для данного случая.


 
Суслик ©   (2006-11-03 12:16) [17]

если аргумент "за" хранить bpl в system32 состоит в том, чтобы не терять место, то втопку такой аргумент, т.к. никакими мегабайтами тут не пахнет, а пробем с установкой и деплоем, больше - ну думаю спорить то с этим не будете?
в случае хранения в каталоге программы - взял и переписал весь каталог.


 
Суслик ©   (2006-11-03 12:25) [18]

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

Может тут есть какая-то тонкость, которую я не знаю?


 
RASkov   (2006-11-03 12:25) [19]

> [11] evvcom ©   (03.11.06 09:08)
> За это либо стрелять, либо просто в помойку такую прогу.
> Без ИМХО.

А какую именно. Если та прога которая заменила "стандартный" файл на свой, имеет единственный вот этот косяк, а остальное на 150% отличная для тебя прога? Я думаю смысл [9] понят правильно. Т.е. можно "случайно испортить" файл так, что для "твоей" проги он 100% рабочий, но для других..... И опять же не все тонкости я описал в [9]


 
RASkov   (2006-11-03 12:27) [20]

> [18] Суслик ©   (03.11.06 12:25)

А зачем использовать "алгоритм поиска", можно полностью путь указать к конкретной ДЛЛ, БПЛ.


 
Loginov Dmitry ©   (2006-11-03 12:27) [21]

> никакими мегабайтами тут не пахнет


Точно? А если посчитать?

vcl70.bpl + rtl70.bpl = 1381376 + 778240 = 2159616

тоесть минимальная необходимая комплектация пакетов весит более 2-м МБайт


 
Суслик ©   (2006-11-03 12:36) [22]


>  [21] Loginov Dmitry ©   (03.11.06 12:27)

+40мб самой программы :)
да... большая потеря 2ух мб


 
Megabyte ©   (2006-11-03 12:38) [23]


> Ну а раз так, то следовало бы уточнять состояние этой опции и для bpl-проекта

Стоп. Или я дурак или одно из 2-х: опция BwRTP для созданного мною пакета не доступна(чекбокс.enabled = false ). Как я могу ее изменить?

Не думал, что тема вызовет такое бурное обсуждение. :) Было интересно послушать ваши мнения.
Я на самом деле только обучаюсь. И пользы от соданного мною пакета не так уж и много пока что. И общий объем проги со всеми пакетами больше, чем если бы сделал все в одном exe. Но в будущем планируется куча однообразных действий(запрос->отчет(Excel)->отправка на почту в конце рабочего дня), кот. будет выполнять мой класс, описанный в пакете.

Пакеты всепока храню в папке со своей прогой. Но хочется стандартные пакеты хранить в отдельной папке.

> таки добавить путь в path.

Больше хочу разораться в этом варианте, нежели писать в реестр.
Как программно задавать системные переменные и переменные среды?


 
Reindeer Moss Eater ©   (2006-11-03 12:42) [24]

....опция BwRTP для созданного мною пакета ....

Эта опция не для пакетов.


 
Сергей М. ©   (2006-11-03 12:46) [25]


> Megabyte ©   (03.11.06 12:38) [23]


Э-э-э ... пардон, опция для package-проектов действительно не доступна и по дифолту установлена.

Тогда вопрос - как ты в хост-приложении намерен использовать свою bpl  после ее дин.загрузки ?


 
Reindeer Moss Eater ©   (2006-11-03 12:54) [26]

Но хочется стандартные пакеты хранить в отдельной папке.

HKLM\Software\Microsoft\Windows\Currentversion\App path\<your_exe_name>


 
Megabyte ©   (2006-11-07 09:28) [27]


> Тогда вопрос - как ты в хост-приложении намерен использовать свою bpl  после ее дин.загрузки ?

Создаю экземпляр класса, описанного внутри модуля в bpl, потом
вызываю его свойства и методы.


 
Сергей М. ©   (2006-11-07 09:34) [28]


> Megabyte ©   (07.11.06 09:28) [27]


Вот теперь понятно.
В таком случае BwRTP действительно должна быть установлена в обоих взаимодействующих модулях.

RTLXX.bpl обязана присутствовать на целевой машине - без нее не будет работать ни тот ни другой модуль. Мало того, должны присутствовать и все другие bpl, от которых зависят твои модули. Зависимости можно просмотреть с пом. TDUMP.EXE


 
DiamondShark ©   (2006-11-07 13:51) [29]

В результате некоторых советов у читателей может сложиться ложное представление, будто бы пакеты можно скомпилировать без установленной опции "Build with runtime packages"


 
Megabyte ©   (2006-11-07 14:12) [30]


> Сергей М. ©  (07.11.06 09:34) [28]

> Megabyte ©  (07.11.06 09:28) [27]
Мало того, должны присутствовать и все другие bpl, от которых зависят твои модули. Зависимости можно просмотреть с пом. TDUMP.EXE

Да я это выяснил методом научного тыка(выяснив, какие используемые классы где описаны + стандартные модули типа RTLXX.bpl). :)
Все уже работает успешно.

Как программно задавать/изменять системные переменные и переменные среды пользователя?


 
Суслик ©   (2006-11-07 22:03) [31]


> Как программно задавать/изменять системные переменные и
> переменные среды пользователя?

Уверен, что для этого нужно создать новый топик - это новый вопрос.



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

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

Наверх




Память: 0.55 MB
Время: 0.03 c
2-1163066744
sunlo
2006-11-09 13:05
2006.11.26
Горизонтальные границы TMemo.


2-1162984640
daser
2006-11-08 14:17
2006.11.26
Как очистить СтрингГрид?


2-1163103495
lsvit
2006-11-09 23:18
2006.11.26
Приоретет программы


15-1162475930
oldman
2006-11-02 16:58
2006.11.26
Латвийские шпроты - 50 лет на российском рынке пепельниц!


2-1162806595
stdctrls
2006-11-06 12:49
2006.11.26
Предача vcl контроллов в процедуру