|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.08.2010, 07:33 | #1 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
|
О загрузке runtime package
Пишу программу с использованием runtime package.
Возникла такая проблема: что бы всё работало корректно необходимо складывать все bpl-пакеты в папку с exe-файлом, что не очень удобно. Есть ли способ так написать программу, что бы основной exe-файл и все пакеты имеющие зависимости загружали .bpl-файлы из папки, заданной, например, в ini-файле (или жестко прописанной в коде)? Поясню: есть папка с приложением в которой находится основной файл app.exe и папка modules, содержащая все необходимые пакеты. Примерно таким образом выглядит папка с portable-версией фотошопа - один файл на неск. кб и рядом папка размером 160 мб. Последний раз редактировалось Greek9000; 11.08.2010 в 07:38. |
11.08.2010, 08:11 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
А чего бы тебе не компилировать BPL внутрь экзешника?
I'm learning to live...
|
|
11.08.2010, 08:33 | #3 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
|
Я пишу здоровенное приложение, в котором без плагинов не обойтись.
Уже перепробовал кучу вариантов. В предыдущей реализации были DLL-ки с компилированными в них пакетами. У них 2 больших недостатка: 1 - большой объём (хотя с этим как-то можно смириться) 2 - размещение формы, хранящейся в DLL-ке на панели - целая эпопея с грустным финалом (потому что у приложения и dll-ки разные адресные пространства). Так что компилировать пакет внутрь экзешника - это не выход. Если знаешь принцип реализованный в фотошопе (тем более портабельном) - поделись, плз. К слову, детальное описание этого принципа будет лучшим ответом на поставленный вопрос (особенно, если с учётом специфики Дельфей). |
11.08.2010, 08:48 | #4 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
И кстати насколько я понимаю спецификации пакров так просто разработчики тебе не выложат, тут нужно оч. много копать. Я бы на твоем месте не заботился об этом, и ложил BPL ки либо рядом с программой, либо в папку System32. либо же если не ошибаюсь можно прописать переменную окружения, в которой указать путь к этим BPL, но я не помню как она называется (По-моему PATH), и тогда операционка должна сама подхватывать из этой переменной пути, где искать загружаемые библиотеки. А писать свой Portable - это круто.
I'm learning to live...
|
||
11.08.2010, 08:50 | #5 |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
|
Уважаемый Stilet подтолкнул меня ещё раз взглянуть "незамыленным" взглядом на структуру файлов фотошопа, в результате чего стал очевидным факт, который я упустил ранее.
Поэтому сам отвечаю на свой вопрос. Исходя из того, что мы имеем основной файл app.exe и рядом с ним папку modules, реализовать поставленную задачу можно так: В папке modules, кроме bpl-пакетов лежит главный exe-файл (пусть будет core.exe), который и содержит главное окно. Он же использует динамические пакеты. А программа app.exe служит для для запуска core.exe. Так же он может пригодиться при автоматическом обновлении программы. Проблема решена. Ура, товарищи! Stilet - спасибо. |
11.08.2010, 09:23 | #6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Но я бы все-тки насчет переменной окружения порыл тему... Если тебе твои библы понадобятся для раных программ то получается что с каждой из них ты будешь делать копии этих библиотек, в то время как можно их сложить в одну папку, и все твои программы с ними работающие будут туда "обращаться".
I'm learning to live...
|
|
11.08.2010, 09:48 | #7 | |
Форумчанин
Регистрация: 01.09.2009
Сообщений: 151
|
Цитата:
А вот если есть возможность задать переменную окружения, которя скажет виндовской функции LoadLibrary что искать библиотеки для загрузки надо ещё и в "моей" папке - это было бы вообще замечательно. (Правда я не представляю с какой стороны подступиться с этим вопросом к Гуглу, но это уже мелочи ) |
|
11.08.2010, 11:02 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
11.08.2010, 11:46 | #9 | ||
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Цитата:
Откуда следует, что если вы статически прилинкованы к пакету - то сделать вы сможете немного (к примеру - установить текущий каталог). Но если вы используете ручную загрузку, то вы можете использовать LoadLibraryEx с флагом LOAD_WITH_ALTERED_SEARCH_PATH, либо же полностью указывая путь. Кроме того, в варианте статической линковки есть способ с перенаправлением DLL: вы можете создать папку myexe.exe.local и закинуть туда все DLL. Ну и высший пилотаж - это манифест и side-by-side. Цитата:
P.S. Поубивал бы всех козлов, которые в неё пишут. Не для этого она предназначена. Сам Delphi тут не безгрешен - суёт туда. Так я теперь не могу все версии Delphi нормально поставить на одну машину - потому что в PATH закончилось место. Приходится извращаться, сворачивать пути, выкидывать системные.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
||
11.08.2010, 12:11 | #10 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
I'm learning to live...
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Runtime runtime = Runtime.getRuntime(); | Pti44ka | Общие вопросы по Java, Java SE, Kotlin | 1 | 22.11.2009 10:45 |
без запроса Package? | koleko | Общие вопросы Delphi | 2 | 18.02.2009 22:59 |
RunTime Error713 (VB) | vio | Помощь студентам | 2 | 12.12.2008 20:45 |
Unit 'MyLib' implicitly imported into package 'MyPackage'. как исправить? | SkAndrew | Компоненты Delphi | 0 | 06.04.2008 00:28 |
Runtime programming | JoanM | Общие вопросы Delphi | 4 | 09.01.2008 11:00 |