Lehce o balíčcích

vložil Radek Červinka 6. května 2011 23:23

Delphi od nějaké verze 3 podporují balíčky (packages). Jedná se o speciální DLL, které podporují speciální vlastnosti Delphi a jejich RTL (tj. zachování objektového modelu, sdílení správce paměti, bezproblémové operace s řetězci a dynamickými poli atd.). Použití balíčků umožňuje velkou modularitu.

Základem je rozmyslit si co bude základní aplikace a co bude v balíčku. Podobné problematice jsem se už věnoval v článcích o DLL a spol.

Dejme tomu, že v balíčku budeme mít formulář a ten budeme dynamicky zavádět a zobrazovat modálně.

Packages

Nastavil jsem jak u Project1.exe, tak u balicek.bpl že budou záviset na základních balíčcích Delphi (rtl a vcl, v mém případě rtl150.bpl a vcl150.bpl), tj. tyto soubory se musejí přidat k výsledné aplikaci.

Nyní do balicek.bpl přidejte co potřebujete, v mém případě formulář TForm2 s tlačítkem a zobrazením informace. Důležité: je nutné provést registraci a odregistraci třídy formuláře:

    1initialization
    2  RegisterClass(TForm2);
    3finalization
    4  UnRegisterClass(TForm2);

Toto nám umožní jednoduše vyhledat náš formulář v balíčku.

V hlavní aplikaci nyní jen doplníme kód:

    1procedure TForm1.btn1Click(Sender: TObject);
    2var
    3  Module: HModule;
    4  AClass: TPersistentClass;
    5begin
    6  Module := LoadPackage('balicek.bpl');
    7  if Module <> 0 then
    8  begin
    9    AClass := GetClass('TForm2');
   10
   11    if AClass <> nil then
   12      with TCustomFormClass(AClass).Create(Application) do
   13      begin
   14        try
   15          ShowModal;
   16        finally
   17          Free;
   18        end;
   19      end;
   20
   21    UnloadPackage(Module);
   22  end;
   23end;

Klíčem je funkce GetClass z Classes nebo FindClass ze stejné jednotky, která vrátí třídu pokud existuje (resp. byla zaregistrována). V případě úspěchu pak se jen vytvoří instance třídy.

Zajímavá je situace, kdy přímo hlavní aplikaci přeložíme s podporou pro balicek.bpl.

balíčky

Nyní můžeme přímo napsat

    1uses 
    2  Form2;
    3
    4procedure TForm1.btn2Click(Sender: TObject);
    5begin
    6  with TForm2.Create(Application) do
    7  begin
    8    ShowModal;
    9    Free;
   10
   11  end;
   12end;

A tím Delphi při startu zavedou náš balíček "balicek.bpl". Výhodou je opět modularizace, kdy se při překladu balíček nemusí překládat.

Nezapomeňte, že novější Delphi umožňují pojmenovávat jednotky strukturovaně, tj. např. DelphiCZ.Framework.Core a i výsledný bpl může mít podobný název.

Další zdroje: Dynamic packages in Delphi.

Existoval i druhý díl, ale úplně zmizel z webu a našel jsem ho jen přes WayBackMachine - tak jsem z něho udělal PDF: Advanced Dynamic Packages - Vino Rodrigues


Nabízíme Delphi školení na různá témata, primárně ve Vaší firmě.

Tagy: , , , ,

Návody | Praxe | Začátečníci

Komentáře

7.5.2011 9:56:40 #

pepak

Zajímavé - nevěděl jsem, že balíčky jde používat i takhle úplně samostatně jako "objektová DLL"; až dosud jsem je používal jen jako runtime packages.

pepak

19.5.2011 18:23:42 #

twister

Dost by ma potesil clanok o balickost ktory by bol trochu detailnejsi... :)

twister

20.5.2011 11:56:45 #

radekc

>Dost by ma potesil clanok o balickost ktory by bol trochu detailnejsi... :)

A v čem jako?

radekc

22.5.2011 17:32:01 #

twister

Da sa v balickoch pouzivat FASTMM na odhalenie neuvolnenej pamate? Niekde som cital ze v balickoch sa nedaju pouzivat modalne okna (netusim ci to je pravda ale nezda sa mi to)... Nejaky ov ereny postup ktorym zistim ci je uz balicek v pamati aby som ho nenahral dva krat, ako zistim informacie o balicku atd...

twister

22.5.2011 23:16:51 #

radekc

- Balíčky používají memory manager hlavní aplikace, takže podle mne to závisí na ní.

- balíčky se po zavedení stávají součástí aplikace. Navíc přímo ve článku je demo na modální okna.

- podle mne loadpackage přímo zaručuje zavedení jen jednou

Cetl jsi ten clanek? jsou tam i odkazy

radekc

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS