"plugin-based" application
9 отговора
0 прегледа
"plugin-based" application
Здравейте,
опитвам се да направя нещо като "plugin-based" приложение.
С dll-чета се получи прилично, но реших да пробвам с packages (bpl)
в съответния "plugin" (bpl) имам формички, които искам да ползвам от главната програмка.
Както четох в разни туториали опитах се в initizalization на пакета да правя RegisterClass(TFormClass) и после в главната програмка след като LoadPackage(...) ми зареди успешно пакета да ползвам формите с GetClass(ClassName) или FindClass(...), но нещо не ги намира
Чудя се какво пропускам ?
Заб.:
формичките са наследници на TTntForm, заради unicode-supporta в TNT компонентите.
Имате ли опит с "plugin-based" програмки и какъв според вас е добрия подход при такива ?
dll, bpl, нещо друго ?
опитвам се да направя нещо като "plugin-based" приложение.
С dll-чета се получи прилично, но реших да пробвам с packages (bpl)
в съответния "plugin" (bpl) имам формички, които искам да ползвам от главната програмка.
Както четох в разни туториали опитах се в initizalization на пакета да правя RegisterClass(TFormClass) и после в главната програмка след като LoadPackage(...) ми зареди успешно пакета да ползвам формите с GetClass(ClassName) или FindClass(...), но нещо не ги намира
Чудя се какво пропускам ?
Заб.:
формичките са наследници на TTntForm, заради unicode-supporta в TNT компонентите.
Имате ли опит с "plugin-based" програмки и какъв според вас е добрия подход при такива ?
dll, bpl, нещо друго ?
Run time packages
И пакетите и приложението ти е добре да са компилирани с run-time packages. Това така ли е?
Re: "plugin-based" application
Никога не съм правил BPL, но със сигурност знам, че това е борландския вариант за отделен модул с UI. Както се казва - малко, но от сърце ...
Re: "plugin-based" application
Според дебелите книги, когато имаме форми е по-добре да се използват runtime packаges, т.е. bpl. Ако тези форми са mdichild е наложително, защото при моите проби да вкарам такива форми в длл(обикновен), ми се губи "фокуса" при отделни компоненти, т.е компонентите не се държат "както трябва". Вярно, това е борланска дивотия подобие на библиотека(длл), но е необходима. В [линк] има примери как се прави пакет и как се използва.
Потърси в нета по този въпрос. Мисля,че в Мастеринг Делфи 6(книга) е описан този подход.
Потърси в нета по този въпрос. Мисля,че в Мастеринг Делфи 6(книга) е описан този подход.
Re: Run time packages
Пробвах bpl-тата - причината за предишния ми проблем беше наистина беше "runtime packages" - 10x :)
След това всичко изглеждаше добре, даже супер, докато ситгнах до проблеми от типа "Cannot load package 'PackageA' It contains unit 'UnitName' which is also contained in package 'PackageB'" и след като се борих като прасе с тиква накрая се отказах.
Причината да пробвам с bpl-та беше, че с dll-ите имах проблем с Application обекта - различен за главната програмка и за dll-те - и от това произлизаха големи мазни с фокуса и т.н.
Но след като не успях да се преборя с bpl-тата се разрових и се оказа, че ако при използване на dll-и се използва "build with runtime packages" тогава Application обекта е същия и нещата изглеждат доста добре
След това всичко изглеждаше добре, даже супер, докато ситгнах до проблеми от типа "Cannot load package 'PackageA' It contains unit 'UnitName' which is also contained in package 'PackageB'" и след като се борих като прасе с тиква накрая се отказах.
Причината да пробвам с bpl-та беше, че с dll-ите имах проблем с Application обекта - различен за главната програмка и за dll-те - и от това произлизаха големи мазни с фокуса и т.н.
Но след като не успях да се преборя с bpl-тата се разрових и се оказа, че ако при използване на dll-и се използва "build with runtime packages" тогава Application обекта е същия и нещата изглеждат доста добре
Re: Run time packages
Ами то точно това за Application-а е същината на run-time packages
Айде успех!
Айде успех!
Re: Run time packages
Ще трябва да си изградиш идея как да разделиш нещата. Така или иначе не искаш един и същи код във всеки бпл, нали?
Класически метод:
Правиш пакет, който включва "базовата част" на приложението.
Ползваш този пакет във главната програма (задължителна стъпка!) и във всеки от плъгините.
Докато си изчистиш идеята ще преправиш пакета няколко пъти, но си струва, предвид крайния ефект :)
Класически метод:
Правиш пакет, който включва "базовата част" на приложението.
Ползваш този пакет във главната програма (задължителна стъпка!) и във всеки от плъгините.
Докато си изчистиш идеята ще преправиш пакета няколко пъти, но си струва, предвид крайния ефект :)
Re: "plugin-based" application
Много лесно се работи с пакети(май не си чел много по-въпроса). Но не съм съгласен, че когато използваш длл и имаш отметката(от главното меню) с"build with runtime packages" обекта Application e същия и нещата изглеждат добре. Те са добре, но до даден момент. За да бъдат наистина добре, трябва да си направиш т.н. "синхронизираща"(не е най- точното наименование) процедура, т.е трябва да синхронизираш Aplication обекта и обекта от длл. При пакетите, тази функция "почти" не съществува. Просто си инсталираш пакета и пишеш 2-3 реда код и всичко е наред.
Ако имаме само функции, процедури и т.н се използват длл, но ако имаме форми - пакети.
Ако имаме само функции, процедури и т.н се използват длл, но ако имаме форми - пакети.
Re: "plugin-based" application
Какво имаш предвид с "до даден момент" ?
просто в случаен момент престава да работи или когато приложението стане по-сложно вече престава да работи ?
просто в случаен момент престава да работи или когато приложението стане по-сложно вече престава да работи ?