logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Delphi. wkompilowanie modułów w moją bibliotekę *.bpl

dkow 04 Lis 2011 19:45 1475 2
REKLAMA
  • #1 10101315
    dkow
    Poziom 14  
    Posty: 87
    Pomógł: 11
    Ocena: 33
    Delphi. wkompilowanie modułów w moją bibliotekę *.bpl

    Piszę program, który działa w oparciu o pluginy.
    Zarówno pluginy, jak i sam program są mojego autorstwa.
    Pluginy skompilowane są jako borlandowe biblioteki *.bpl, ładowane dynamicznie (w miarę potrzeb) przez główny program (exe).
    Aby program (exe) zechciał ładować moje bpl’e muszę zaznaczyć w opcjach projektu „Build with runtime packages”.
    Delphi. wkompilowanie modułów w moją bibliotekę *.bpl
    Gdy zaznaczą ową opcję, uaktywnia się pole edycyjne i mogę w nie wpisać, które pakiety mają być wkompilowane (zlinkowane) w exe’ka, a pozostałe używane moduły nie są wkompilowane (zlinkowane), ale za to muszę podczas instalacji programu na innym komputerze skopiować je (*.bpl) do katalogu z mim exe’kiem lub do innego katalogu systemowego.
    Wszystko wydawało by się fajne, tylko jest jeden problem.
    Dla Exe’ka faktycznie to elegancko działa, ale nie da się tego zrobić (zaznaczyć opcji „Build with runtime packages” i wybrać pakiety) w ten sposób dla mojego pluginu, czyli dla *.bpl’a.
    Efekt jest taki że choć mój główny program (exe) ma wkompilowane pakiety które potrzebuje (tak aby nie trzeba było dołączać dodatkowych bpl’i) to i tak muszę wszystkie bpl’e dołączać potem do programu bo kompilator (linker) nie wkompilował (zlinkował) do żadnych moich pluginów (bpl).
    Kiedy pisałem taki program w starym Delphi, ale oparty na bibliotekach DLL, takie problemy nie istniały.

    Może to się robi jakoś inaczej? Może jakieś preprocesory?
    Dodam że wszelkie tutoriale traktujące o bibliotekach bpl milczą na ten temat.
    Zagadnienie to frapuje mnie już of kilku lat i wielokrotnie google przeczesywałem, lecz bez skutecznie.
    Może znajdzie się ktoś kto zna to zagadnienie?
  • REKLAMA
  • #2 10101448
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 300
    Robisz błąd.
    Plugin-y, to powinny być pliki DLL o takiej samej strukturze wywołania funkcji podstawowych. Po to są właśnie pliki DLL.
    A pliki BPL, są to biblioteki stałe.
    Zrób program EXE i plugin-y do niego w formie DLL-i, i każdy z plików, zarówno główny jak i DLL-e, będzie mógł korzystać z tych samych, zewnętrznych plików BPL, bez potrzeby łączenia ich z plikiem wynikowym.
  • #3 10101562
    dkow
    Poziom 14  
    Posty: 87
    Pomógł: 11
    Ocena: 33
    Chciałbym zauważyć że, bpl'e to tak naprawdę są dll'e, tyle że, jak to powiedzieli na prezentacji najnowszego Delphi XE2 "wypasione" przez borlanda.
    Zapewne zapytasz dla czego upieram się przy tych BPL'ach.
    Są ważne powody.
    Od Delphi 2009 wprowadzono obsługę Unicode (i nie tylko).
    Efekt jest taki, że forma która jest zawarta w DLL'u która zawiera jakieś elementy typowo unikodowe np. StatusBar, po wywołaniu jej z poziomu Exe'ca wywala komunikat błędu że interfejs okien nie są identyczne i program się wywraca.
    Ta sama aplikacja skompilowana w starszej wersji działa bez zarzutu. Dzwoniłem nawet do BSC ("co oni mi sprzedali!!!").

    Ale ten komentarz odszedł trochę od tematu.
REKLAMA