![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос проектам, использующим пакеты(packages)? [D7, XP]
Megabyte © (2006-11-02 13:21:00)Сделал программу, кот. подгружает пакет динамически. Соответственно, основной проект делал с установкой build with runtime packages.
При запуске на другом компе программа поругалась, что не может найти библиотеку rtl.bpl, кот. используется в пакете.
1)Мне теперь надо с собой таскать все пакеты, кот. использую в проекте?
2)Если да, то где они должны хранится?
Суслик (2006-11-07 22:03:00) [1]
> Как программно задавать/изменять системные переменные и
> переменные среды пользователя?
Уверен, что для этого нужно создать новый топик - это новый вопрос.
Megabyte (2006-11-07 14:12:00) [2]
> Сергей М. © (07.11.06 09:34) [28]
> Megabyte © (07.11.06 09:28) [27]
Мало того, должны присутствовать и все другие bpl, от которых зависят твои модули. Зависимости можно просмотреть с пом. TDUMP.EXE
Да я это выяснил методом научного тыка(выяснив, какие используемые классы где описаны + стандартные модули типа RTLXX.bpl). :)
Все уже работает успешно.
Как программно задавать/изменять системные переменные и переменные среды пользователя?
DiamondShark (2006-11-07 13:51:00) [3]В результате некоторых советов у читателей может сложиться ложное представление, будто бы пакеты можно скомпилировать без установленной опции "Build with runtime packages"
Сергей М. (2006-11-07 09:34:00) [4]
> Megabyte © (07.11.06 09:28) [27]
Вот теперь понятно.
В таком случае BwRTP действительно должна быть установлена в обоих взаимодействующих модулях.
RTLXX.bpl обязана присутствовать на целевой машине - без нее не будет работать ни тот ни другой модуль. Мало того, должны присутствовать и все другие bpl, от которых зависят твои модули. Зависимости можно просмотреть с пом. TDUMP.EXE
Megabyte (2006-11-07 09:28:00) [5]
> Тогда вопрос - как ты в хост-приложении намерен использовать свою bpl после ее дин.загрузки ?
Создаю экземпляр класса, описанного внутри модуля в bpl, потом
вызываю его свойства и методы.
Reindeer Moss Eater (2006-11-03 12:54:00) [6]Но хочется стандартные пакеты хранить в отдельной папке.
HKLM\Software\Microsoft\Windows\Currentversion\App path\<your_exe_name>
Сергей М. (2006-11-03 12:46:00) [7]
> Megabyte © (03.11.06 12:38) [23]
Э-э-э ... пардон, опция для package-проектов действительно не доступна и по дифолту установлена.
Тогда вопрос - как ты в хост-приложении намерен использовать свою bpl после ее дин.загрузки ?
Reindeer Moss Eater (2006-11-03 12:42:00) [8]....опция BwRTP для созданного мною пакета ....
Эта опция не для пакетов.
Megabyte (2006-11-03 12:38:00) [9]
> Ну а раз так, то следовало бы уточнять состояние этой опции и для bpl-проекта
Стоп. Или я дурак или одно из 2-х: опция BwRTP для созданного мною пакета не доступна(чекбокс.enabled = false ). Как я могу ее изменить?
Не думал, что тема вызовет такое бурное обсуждение. :) Было интересно послушать ваши мнения.
Я на самом деле только обучаюсь. И пользы от соданного мною пакета не так уж и много пока что. И общий объем проги со всеми пакетами больше, чем если бы сделал все в одном exe. Но в будущем планируется куча однообразных действий(запрос->отчет(Excel)->отправка на почту в конце рабочего дня), кот. будет выполнять мой класс, описанный в пакете.
Пакеты всепока храню в папке со своей прогой. Но хочется стандартные пакеты хранить в отдельной папке.
> таки добавить путь в path.
Больше хочу разораться в этом варианте, нежели писать в реестр.
Как программно задавать системные переменные и переменные среды?
Суслик (2006-11-03 12:36:00) [10]
> [21] Loginov Dmitry © (03.11.06 12:27)
+40мб самой программы :)
да... большая потеря 2ух мб
Loginov Dmitry (2006-11-03 12:27:00) [11]> никакими мегабайтами тут не пахнет
Точно? А если посчитать?
vcl70.bpl + rtl70.bpl = 1381376 + 778240 = 2159616
тоесть минимальная необходимая комплектация пакетов весит более 2-м МБайт
RASkov (2006-11-03 12:27:00) [12]> [18] Суслик © (03.11.06 12:25)
А зачем использовать "алгоритм поиска", можно полностью путь указать к конкретной ДЛЛ, БПЛ.
RASkov (2006-11-03 12:25:00) [13]> [11] evvcom © (03.11.06 09:08)
> За это либо стрелять, либо просто в помойку такую прогу.
> Без ИМХО.
А какую именно. Если та прога которая заменила "стандартный" файл на свой, имеет единственный вот этот косяк, а остальное на 150% отличная для тебя прога? Я думаю смысл [9] понят правильно. Т.е. можно "случайно испортить" файл так, что для "твоей" проги он 100% рабочий, но для других..... И опять же не все тонкости я описал в [9]
Суслик (2006-11-03 12:25:00) [14]Другой возможный аргумент, что при определенных услових LoadLibrary (которую в конечно имтоге вызывает LoadPackage) может иметь альтернативный алгоритм поиска библиотек. Например, первым делом искать *не* в текущем каталоге. Но согласно доке из msdn в тек. каталоге ищется в первую очередь.
Может тут есть какая-то тонкость, которую я не знаю?
Суслик (2006-11-03 12:16:00) [15]если аргумент "за" хранить bpl в system32 состоит в том, чтобы не терять место, то втопку такой аргумент, т.к. никакими мегабайтами тут не пахнет, а пробем с установкой и деплоем, больше - ну думаю спорить то с этим не будете?
в случае хранения в каталоге программы - взял и переписал весь каталог.
Сергей М. (2006-11-03 11:56:00) [16]
> Программа не должна таскать за собой мегабайты продублированного
> кода
С этим абсолютно согласен.
> Оно в любом случае требуется
Нет, не в любом. А только в тех случаях, когда оно действительно небходимо.
> Можно придумать миллионы случаев, когда приложение будет
> нормально работать с двумя экземплярами RTL
Может здесь как раз один из тех случаев ? Автор же не уточняет... Зато уточняет, что хост-модуль собран с RTP. Ну а раз так, то следовало бы уточнять состояние этой опции и для bpl-проекта, вот только тогда можно былобы о чем-то предметно говорить, в т.ч. и о небходимости общей RTL для данного случая.
DrPass (2006-11-03 11:38:00) [17]
> если бы требовалось обеспечить общий экз-р RTL для взаимодействующих
> модулей
Оно в любом случае требуется. Можно придумать миллионы случаев, когда приложение будет нормально работать с двумя экземплярами RTL. Точно так же можно глубоко забить на освобождение создаваемых объектов, и все равно оно будет нормально работать. Но это же не значит, что так нужно делать. Программа не должна таскать за собой мегабайты продублированного кода.
Сергей М. (2006-11-03 10:50:00) [18]
> DrPass © (03.11.06 10:40) [13]
> ДОЛЖНА
> Иначе программист огребет
Интересный аргумент) ...
> DLL-плагинов
О плагинах у автора нет ни слова.
И вообще - мало ли зачем автор загружает эту bpl !
Может он тут же ее выгружает ?)
Сборка с RTP была бы нужна, если бы требовалось обеспечить общий экз-р RTL для взаимодействующих модулей. А если такое требование не выдвигается, то состояние опции BwRTP при сборке взаимодействующих проектов может быть произвольным.
DrPass (2006-11-03 10:40:00) [19]
> Состояние опции BwRTP для хост-проекта в этом случае не
> играет никакой роли.
Еще как играет. Если программа динамически грузит BPL-пакет, она ДОЛЖНА быть собрана с установленной BwRP. Иначе программист огребет почти все те же грабли, что и при использовании DLL-плагинов.
Сергей М. (2006-11-03 09:32:00) [20]
> Сделал программу, кот. подгружает пакет динамически. Соответственно,
> основной проект делал с установкой build with runtime
> packages
Состояние опции BwRTP для хост-проекта в этом случае не играет никакой роли.