Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
в продолжение моих ранних тем BPL и/или DLL. динамически подгружаемые визуальные элементы форм. тема достаточно не новая, но я не нашел где люди конкретно разобрались с этим, такое чувство что с книжки печатают в форумы. Проект Код: pascal 1. 2. 3. 4. 5. авторкласс 'cls_from_bpl' в 'file_name.bpl' зарегистрирован И так реализация BPL на комптютере, где есть Delphi Проект с параметром Link width runtime packages = True Размер проекта 5 Мб. мой BPL подгружается и выполняется. AClass := КЛАССУ Проект с параметром Link width runtime packages = False Размер проекта 20 Мб. мой BPL подгружается но не может найти класс. AClass := nil И так реализация на комптютере, где НЕТ Delphi Проект с параметром Link width runtime packages = True Размер проекта 5 Мб. до подгрузки своего BPL дойти не могу, так как проект не может найти стандартные. решения у меня есть, но мне они не нравятся. например подтянуть стандартные BPL и класть их в проект и прописывать пути и так далее. вопрос, как правильно организовать, может бить директивами или иначе, чтобы стандартные BPL были не ссылками, и при параметре проекта Link width runtime packages = False вошли в проект как и положено. В дополнительно подгружаемые и выгружаемые мои BPL работали также хорошо, как и при Link width runtime packages = True ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2021, 13:02 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
yemets63как правильно организовать Никак, обломись. По определению BPL. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2021, 13:17 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
yemets63 вопрос, как правильно организовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2021, 14:26 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
пользуй интерфейсы. зы: какова цель всего этого движняка? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2021, 14:35 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийкакова цель всего этого движняка? Он же написал: формы в DLL-ках. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2021, 14:41 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
13.05.2021 14:41, Dimitry Sibiryakov пишет: > Он же написал: формы в DLL-ках. ну дак и хрен с ними. на кой ему понадобился "прямой доступ" к объектам в этих DLL-ях, я лично не понимаю. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2021, 14:45 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
Вроде, для решения вопроса, достаточно этого: System.Classes procedure RegisterClass(AClass: TPersistentClass); procedure RegisterClasses(const AClasses: array of TPersistentClass); Посмотри какие функции рядом... Т.е. в загружаемой bpl зарегистрируй классы, к которым собираешься обращаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2021, 17:11 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
Virtual StudentТ.е. в загружаемой bpl зарегистрируй классы, к которым собираешься обращаться. Без знания как именно происходит регистрация и понимания работы runtime - не взлетит. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2021, 17:21 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
Надо делать свою bpl с рантаймом rtl и vcl. И с ней компилировать в режиме Link width runtime packages = True Или удалять лишние модули из списка, которые не нужны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2021, 19:51 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
ziv-2014, вот зная именно это я сделал то что должно грузиться из BPL, но когда начал смотреть, я не могу при сборке проекта BPL поставить эту директиву в опциях проекта DPK, ее просто нет, это меня и смутило. раньше я создавал собственные компоненты, и ни когда не задумывался, так как я их импортировал в IDE и дальше все шло как по маслу, у меня три способа RUNTIME изменений в формах, первый очень сложный - другая тема, второрй DLL и третий оказался очень прост в своей реализации но сложный в использовании, это BPL. но как рзграничить, те пакеты что постоянные и те пакеты что хочу подгружать и выгружать. как правильно создать DPK BPL чтобы он слушался при его подсоединении к проекту, RTL и VCL в requires прописаны, классы все отрегистрированы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2021, 21:55 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
yemets63 ziv-2014, вот зная именно это я сделал то что должно грузиться из BPL, но когда начал смотреть, я не могу при сборке проекта BPL поставить эту директиву в опциях проекта DPK, ее просто нет, это меня и смутило. раньше я создавал собственные компоненты, и ни когда не задумывался, так как я их импортировал в IDE и дальше все шло как по маслу, у меня три способа RUNTIME изменений в формах, первый очень сложный - другая тема, второрй DLL и третий оказался очень прост в своей реализации но сложный в использовании, это BPL. но как рзграничить, те пакеты что постоянные и те пакеты что хочу подгружать и выгружать. как правильно создать DPK BPL чтобы он слушался при его подсоединении к проекту, RTL и VCL в requires прописаны, классы все отрегистрированы. Ёлки-палки! 1. BPL - это такая же DLL , только со стандартизированным именованием функций внутри. 2. При загрузке/выгрузке (LoadPackage) автоматом выполняются функции @Initialization и @Finalization (угадайте, что они делают :) ) 3. В секцию Initialization пишем RegisterClass(TMyForm). При этом, сам пакет MyModule.bpl не нужно прописывать в required исполняемого файла. 4. В нужном месте программы вызываете GetClass('TMyForm'), приводите класс (или извлекаете интерфейс) к своему базовому (от которого унаследована форма), создаете его экземпляр, и творите с ним что хотите! 5. По завершении "экзерсисов" с объектом выгружаете библиотеку (BPL). У меня так все работает, начиная с 2005-го года... Должно и у в Вас "взлететь"! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2021, 08:14 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
Соврал, функции называются Initialize и Finalize... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2021, 08:24 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
Virtual Student, 3. В секцию Initialization пишем RegisterClass(TMyForm). При этом, сам пакет MyModule.bpl не нужно прописывать в required исполняемого файла. Вопрос в том, где залинкована RegisterClass - в основном модуле или в какой-то bpl. В JCL есть утилита, которая показывает, где залинкован код. Надо ее использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2021, 09:26 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
Virtual Student У меня так все работает, начиная с 2005-го года... Должно и у в Вас "взлететь"! У вас так работает при сборке приложения без использования Use Runtime Packages?. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2021, 16:55 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
alekcvp Virtual Student У меня так все работает, начиная с 2005-го года... Должно и у в Вас "взлететь"! У вас так работает при сборке приложения без использования Use Runtime Packages?. Мля, только с подгружаемыми паетами будет толк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2021, 17:16 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
alekcvp Virtual Student У меня так все работает, начиная с 2005-го года... Должно и у в Вас "взлететь"! У вас так работает при сборке приложения без использования Use Runtime Packages?. ну сказать, "что я не знал?", нет, знал, но надеялся. обидно но с Runtime package = false не работают мои BPL , не получает классс. в итоге два варианта, или прописывать все BPL и свои и стандартные, велика вероятность что то в будущем забыть и отправить проект с багом клиенту, или ни фига и выбрать другой путь. я чесс слово не знаю что там у Virtual Student без рантайм работает. Virtual Student конечно сделал некоторые полезные замечания, "но я вроде не первый день за рулем", в BPL есть и инициализация и закрытие, конечно когда появились траблы, пробовал прописывать RTL и библиотеки и использовать их как только в BPL, вместе и раздельно. по сути я не понимаю причины, почему без рантайм нельзя в середине хода программы по желанию загрузить BPL , что то сделать из(в) BPL и выгрузить BPL. это работает только при рантайм. и в момент, когда я загружаю BPL я получаю его, но как только начинаю подключать или искать класс из BPL, не вижу я его в основном проекте, он всегда nil. может я что не так делаю. вот думаю, читать еще BPL и танцы с бубном дргих людей, или использовать DLL , опять выбор, но DLL опять игра с бубном, из готовых функционвльных модулей, у меня более 20 имеют формы, открывать отдельно эти формы, не красиво, разворачивать как MDI в MDI, ну это извращение, фреймы - ёлки пали, сразу начнуться Ancestor и его низкие формы с фреймаи, выводить в Panel, например как я делаю в BPL, но так в DLL работать не будет, и потом DLL, как не крути это другой размер. Сейчас проект получился достаточно читаемый, без награмождений и без сотни форм наследников. конечно все модули подключить в проект и вопрос решен, но хотелось бы в будущем при необходимости изменить модуль поменять его версию и далее на рабочем месте основного модуля программы просто подменить один модуль функциональности. кучу маленьких EXE делать - как то позорно и опять же размер. есть еще одно извращение, лет много назад, ровно в 2007 - 2008 делал проект с использованием скрипта сборки DFM с исходным кодом, все работало, но тот проект был сугубо внутренний, особо ни чего не ломалось, работало. но он был до ужаса сложный, все запятые приходилось учитывать и обрабатывать может еще будут у кого идеи, как получить КЛАСС из BPL, ну и дальше по описанной проблеме при Link ... Runtime = false . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2021, 22:44 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
yemets63по сути я не понимаю причины, *почему без рантайм нельзя в середине хода программы по желанию загрузить BPL* Понимание - результат опыта. Начни изучать RTL и VCL (исходники доступны). Изучать как работает система (книга Рихтера тебе в руки). Тогда и понимание придёт. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2021, 00:11 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
yemets63, тема давнишняя, мерзопакостная... Мне например очень сильно помог след. пример (в прилагаемом файле. Нашел ссылку на этом же форуме в одном из очень старых сообщений). Обратите внимание на настройки проекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2021, 10:18 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Совет принял. Есть у меня под рукой Рихтер. Я понимаю, как это сделано в системе, но я не понимаю, почему это не упрощено и просто не доступно в IDE. по сути мы делаем все правильно, но для подключения своих пакетов в период работы мы зависим просто от одной галочки. например, когда выполняем скрипт по компилированию проекта самого в себе, или просто скрипт создания всей формы с компонентами динамически внутри уже EXE - работает. даааа, это совсем другое , но это же работает в период выполнения EXE. мы создаем динамически множество экземпляров одной формы с множеством компонентов и конечно с событиями, их тоже создаем. и это все работет. логично - подгрузить в EXE уже созданную свою форму в IDE было легче, чем создавать, но нет. пару путных идей проскочило, пока я попробовал сделать общий проект BPL для теста, и туда все знагнал стандартное, ура работает, но как то я не доверяю тому, что получилось. пробую возникшие идеи опробовать. если буду совсем тонуть, напишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2021, 11:27 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
yemets63, Ну если очень упрощать: когда ты строишь систему с рантайм библиотеками - и твоё приложение и твой модуль загружают общую копию RTL и VCL из этих рантайм библиотек и в ней регистрируют новые классы, которые видны им обоим. А если ты не включаешь рантайм библиотеки, то они вкомпиливаются отдельно в приложение и отдельно в модуль и при запуске ты получаешь две копии RTL и VCL, которые друг о друге ничего не знают. Возможный вариант, который мне в голову приходит - эмулировать BPL обычной DLL-кой. Сделать обычную DLL, которая экспортирует функции Initialize , Finalize и RegisterClasses() , причём последняя объявлена как-то так: Код: pascal 1. 2. 3. 4. И вызывать её из приложения, передавая ей процедуру RegisterClass() параметром. Насколько это будет работать в таком виде - я хз, надо тестировать. И да, не забудь про общий менеджер памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2021, 12:27 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
yemets63Я понимаю, как это сделано в системе Уверен? Ты точно понимаешь, что у каждой DLL и EXE - свои собственные глобальные переменные и свой собственный набор функций, обращающихся к ним? Если ты это реально понимаешь - как ты себе представляешь "галочку", способную заставить DLL обращаться к глобальным переменным EXE-шника? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2021, 12:49 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, эх, была бы пятница, и не онлайн, то тема реальна для длительного обсуждения за бутылочкой хорошего виски. в DLL у меня результат есть, но это 20 метров на файл, нет смысла вытаскивать модули функциональностей в отдельные файлы. так как можно всё положить в EXE, который весит не так много и его обновлять. галочка имеет достаточно полезный смысл, и когда я добавляю свои пакеты в начале, и они входят в EXE то проблем нет ни каких. чем мне приглянулся BPL, это 20 модулей функциональностей и всего 10 метров максимум. я получил класс, в моем случае, но не пойму, потому что так не должно быть, пока на стадии тестирования Код: pascal 1. 2. запускаю второй раз Код: pascal 1. 2. третий раз опять же может быть или успех или NIL, почему так, но это что то другое. и так танцую с бубном дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2021, 13:16 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
yemets63в DLL у меня результат есть Мне совершенно всё равно какой резльтат у тебя есть. Я спросил точно ли ты понимаешь, что каждая DLL и EXE имеют разные глобальные переменные. Но, судя по твоим танцам - таки нет. В морг. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2021, 13:26 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, прям как на экзамене, "Adobe.exe и Word.exe могут иметь общие глобальные переменные"?, :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2021, 14:15 |
|
||
|
не работает подгруженный BPL при Link width runtime packages равно False
|
|||
|---|---|---|---|
|
#18+
alekcvp, dll работает, проблема в размере файла DLL, пропадает смысл оптимизации модулей функциональностей, в данный момент цель это запуск самих BPL, DLL или BPL или даже EXE по сути без разницы, но BPL в сравнении с другими дает лучший результат выполнение функциональностей, которые получают параметры из основного файла EXE. после этого BPL сам отрабатывает функциональность находясь в EXE и отправляет результат на сервер приложений. в связи с тем что функциональности зависят от множества факторов, они имеют проблему частого обновления, а также параллельной работы иногда разных версий, если где то функциональность еще не обновилась. передача параметра из EXE в BPL или в DLL проходит нормально. обратно из BPL в EXE этого делать не нужно, результат уходит в базу. основной EXE это просто GUI отправки задачи на ранзные PC и получение результата, основной EXE не меняется по сути ни разу, ну может раз в полгода, т.е. автоматическое обновление ему не так важно как обновление отдельных функциональностей. интерфейс на 95% custom. сейчас всё это работает, и даже с обновлением отдельных функциональностей, но достаточно старые механизмы, некоторые я делал еще в 2004, и так как проект требует расширение, есть желание некоторые моменты сделать лучше. все функциональности были переработаны, сделано уже много, есть желание сделать то, на чем я тормознул, это BPL и продолжить создание новых функциональностей. Правильно оптимизировав что то сейчас, упрощаеться жизнь в будущем. пока решение есть одно, и оно работает: ни чего не меняя, положил все стандартные BPL в одно место и прописал пути. на трех VM посмотрел, полет нормальный, но такое решение влечет вероятность ошибки в будущем. после перекомпиляции вылетит какая нибудь библиотека, об этом Delphi не сообщит даже при BUILD, в итоге клиент получит BUG. об этом я уже писал. решения из Plugins похожи на мои, и буквально вчера я это проделывал, и так пример из Plugins: в самой DEMO.EXE куда загружаются BPL, дублируется вызов самих PAS используемых в BPL. По сути получается два проекта со своими глобальными переменными, на зависимо от имен. EXE и BPL. но в DEMO.EXE отрабатывается тот PAS который был собран в EXE, а не тот который был загружен из BPL. и еще один момент есть не хороший, который я обнаружил, но это вторая часть проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2021, 14:58 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40070157&tid=2037327]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 300ms |

| 0 / 0 |
