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:

initialization
  RegisterClass(TForm2);
finalization
  UnRegisterClass(TForm2);

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

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

procedure TForm1.btn1Click(Sender: TObject);
var
  Module: HModule;
  AClass: TPersistentClass;
begin
  Module := LoadPackage('balicek.bpl');
  if Module <> 0 then
  begin
    AClass := GetClass('TForm2');

    if AClass <> nil then
      with TCustomFormClass(AClass).Create(Application) do
      begin
        try
          ShowModal;
        finally
          Free;
        end;
      end;

    UnloadPackage(Module);
  end;
end;

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

uses 
  Form2;

procedure TForm1.btn2Click(Sender: TObject);
begin
  with TForm2.Create(Application) do
  begin
    ShowModal;
    Free;

  end;
end;

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

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

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).

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.

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.

Poslední komentáře

Comment RSS