DLL: Porovnání verzí
Smazaný obsah Přidaný obsah
→Microsoft Visual Basic: drobnosti formulace |
typografie, stylistika, doplnění a aktualizace odkazu + eliminace neplatného |
||
Řádek 1:
'''DLL''' ('''Dynamic-link library''', dynamicky linkovaná [připojovaná] knihovna, knihovní modul)<ref name="petzold">{{citace monografie
'''DLL''' ('''Dynamic-link library''', dynamicky linkovaná knihovna) je v [[Informatika|informatice]] implementace konceptu [[Knihovna (programování)#Dynamické knihovny|sdílených knihoven]] společnosti [[Microsoft]] pro [[operační systém]] [[Microsoft Windows]], který je též používán v [[OS/2]]. [[Soubor]]y s knihovnami obvykle používají [[Přípona souboru|příponu]] <code>DLL</code>, <code>OCX</code> (pro [[ActiveX]] prvky) nebo <code>DRV</code> (pro staré [[Ovladač zařízení|systémové ovladače]]).▼
| příjmení = PETZOLD
Formát DLL souborů je stejný jako v případě [[EXE]] souborů, tedy [[Portable Executable]] (PE) pro [[32bitový|32bitové]] a [[64bitový|64bitové]] Windows nebo [[New Executable]] (NE) pro [[16bitový|16bitové]] Windows. Stejně jako EXE soubory mohou DLL obsahovat [[Strojový kód|kód]], [[data]] a zdroje v libovolné kombinaci.▼
| jméno = Charles
| titul = Programování ve Windows
| vydání = 1
| vydavatel = Computer Press
| místo = Praha
| rok = 1999
| isbn = 80-7226-206-8
▲
| příjmení = PETZOLD
| jméno = Charles
| titul = Programování ve Windows
| vydání = 1
| vydavatel = Computer Press
| místo = Praha
| rok = 1999
| isbn = 80-7226-206-8
▲ | strany = 1048}}</ref> Formát DLL souborů je stejný jako v případě [[EXE]] souborů, tedy [[Portable Executable]] (PE) pro [[32bitový|32bitové]] a
== Historie DLL souborů ==
V
Stejná architektura, pomocí které GDI načítalo ovladače pro různá zařízení, umožnila systému načíst programy tak, že bylo možné z těchto programů volat API funkce knihoven USER a
▲V prvních verzích operačního systému [[Microsoft Windows]] byly všechny procesy spouštěny v jednom [[Správa paměti#Adresový prostor procesu|adresovém prostoru]] paměti počíteče a díky [[Multitasking#Nepreemptivní multitasking|kooperativnímu multitaskingu]] se procesy explicitně vzdávaly procesoru. Všechny funkce operačního systému poskytoval [[MS-DOS]], zatímco všechny vysokoúrovňové služby byly poskytovány pomocí DLL. Aplikační rozhraní ([[API]]) pro vykreslování ([[GDI]], Graphics Device Interface) bylo implementováno v DLL zvané <code>GDI.EXE</code> a uživatelské rozhraní v <code>USER.EXE</code>. Tyto vrstvy nad DOSem byly sdílené pro všechny běžící procesy (pod podmínkou provozu na strojích s alespoň jedním megabajtem paměti) s cílem umožnit procesům vzájemně spolupracovat. Kód v GDI překládal příkazy pro vykreslování do specifických instrukcí různých zařízení: v případě displeje byly měněny body ve [[framebuffer]]u, v případě tiskárny byly příkazy transformovány na pokyny pro tiskárnu. Aby GDI mohlo pracovat s různými zařízeními, načítaly se do paměti programy zvané [[ovladač zařízení|ovladače zařízení]].
U
▲Stejná architektura, pomocí které GDI načítalo ovladače pro různá zařízení, umožnila systému načíst programy tak, že bylo možné z těchto programů volat API funkce knihoven USER a GDI. Tento koncept se nazývá ''dynamické linkování''.
V
▲U nesdílených, tedy ''statických'', knihoven se jejich kód jednoduše ve fázi ''linkování'' přidává do všech jednotlivých programů, které příslušný kód potřebují a volají. V případě dynamického linkování je sdílený kód umístěn do separátního souboru. Programy jsou s těmito soubory spojeny dynamicky pomocí operačního systému. To zlepšuje jak využití paměti, tak správu těchto dat. DLL soubory poskytují standardní výhody [[Knihovna (programování)#Dynamické knihovny|sdílených knihoven]], mezi které patří zejména [[modularita]]. Modularita umožňuje provést změny v jedné knihovně sdílené více aplikacemi bez nutnosti tyto aplikace modifikovat. Další přínos modularity je v možnosti použití generického rozhraní pro [[zásuvné moduly]]. Rozhraní umožňuje integraci různých modulů do již existujících aplikací opět bez nutnosti aplikace modifikovat. Tento koncept dynamické rozšiřitelnosti je hojně využíván v modelu dílčích objektů [[COM]] (Component Object Model).
I
▲V systémech Windows 1.x, 2.x a 3.x sdílejí všechny aplikace stejný adresní prostor, do kterého jsou DLL načteny pouze jednou. Data těchto knihoven jsou pak sdílena všemi aplikacemi, což mohlo být využito k nepřímé [[Meziprocesová komunikace|meziprocesové komunikaci]], ale také to mohlo vést k poškození nějaké aplikace. Od [[Windows 95]] měl pak každý proces svůj vlastní adresní prostor. Zatímco kód dynamických knihoven může být sdílen, data jsou od této doby privátní s výjimkou explicitního vyžádání ze strany knihovny.
▲I když se DLL knihovny staly jádrem architektury systému Windows, mají mnoho nedostatků, které se souhrnně nazývají [[DLL peklo]] ({{Vjazyce2|en|''DLL hell''}}).<ref name="DLL_Hell">{{Citace elektronické monografie
| titul = The End of DLL Hell
| vydavatel = Microsoft Corporation
| url = http://msdn.microsoft.com/en-us/library/ms811694.aspx
| datum přístupu = 2009-07-11}}</ref>--> V současné době Microsoft poskytuje několik řešení tohoto problému. Patří mezi ně
* platforma [[Microsoft .NET]] nebo
* virtualizace založená na [[Microsoft Virtual PC]] a
* Dalším řešením pak je implementace [[Side-by-Side Assembly]].
== Funkce knihovny DLL ==
Vzhledem k tomu, že jsou DLL knihovny v podstatě
Knihovny DLL jsou spouštěny v rámci volajícího procesu (tj. probíhajícího programu) a
* paměťový prostor a
* přístupová práva.
Tím je zajištěna nízká režie při použití, ale zároveň pro volající EXE soubor není zajištěna ochrana proti případným chybám v DLL knihovně.
== Vlastnosti DLL souborů ==
=== Správa paměti ===
Ve [[Win32]] jsou DLL soubory organizovány do ''sekcí'', kde každá sekce obsahuje atributy informující o tom, zda je například v sekci povolen zápis nebo je pouze pro čtení a také o tom, zda je vykonatelná (pro [[Strojový kód|kód]]) nebo není (je jen pro [[data]]).
Kód v DLL knihovnách je obvykle sdílen všemi procesy, které tyto knihovny využívají. Knihovny jsou tak ve fyzické paměti načteny pouze jednou a
Datové sekce jsou obvykle privátní, takže procesy využívající DLL mají vlastní kopii všech dat knihovny. Datové sekce lze ovšem sdílet a
=== Rozlišení a importování funkcí ===
Každá funkce exportovaná DLL knihovnou je identifikována číslem a
Import funkcí pomocí pořadí není o moc rychlejší, protože tabulka exportovaných funkcí je seřazena podle jména, takže k nalezení funkce lze použít [[binární vyhledávání]]. V 16bitových verzích systému Windows nebyla tabulka řazena, takže vyhledání mohlo být o něco pomalejší.
Spustitelný soubor je možné vázat na konkrétní verzi knihovny a
=== Odložené načtení ===
Řádek 47 ⟶ 64:
{{Citace elektronické monografie
| titul = Linker Support for Delay-Loaded DLLs
| vydavatel = Microsoft Corporation
| url = http://msdn.microsoft.com/en-us/library/151kt790.aspx
| datum přístupu = 2009-07-11}}</ref> V případě, že knihovna není nalezena, nelze ji načíst nebo konkrétní funkce neexistuje, vygeneruje operační systém [[Výjimka|výjimku]], kterou může aplikace zachytit a
== Aspekty kompilátoru a programovacího jazyka ==
=== Delphi ===
V
[[Object Pascal|Delphi]] nepotřebuje
=== Microsoft Visual Basic ===
[[Visual Basic]] (VB), podporuje jen [[run-time]] nalinkování; navíc ale kromě používání <tt>
Při importu DLL funkcí skrze deklarace VB vyhazuje run-time error (chybu), jestliže nemohl být
Při vytváření DLL ve VB, IDE dovolí vytvářet pouze ActiveX DLL, nicméně byly vytvořeny metody<ref>{{
|
|
▲ | title = Creating a Windows DLL with Visual Basic
▲ | publisher = O'Reilly Media
▲ | date = 2005-04-26
| url = http://www.windowsdevcenter.com/pub/a/windows/2005/04/26/create_dll.html?page=1
|
=== C a C++ ===
Microsoft [[Visual C++]] (MSVC) nabízí několik rozšíření oproti standardnímu [[C++]], které umožňují funkcím být specifikované jako importované nebo exportované přímo v C++ kódu; toto bylo adoptováno i ostatními Windows [[C (programovací jazyk)|C]] a
Mimo specifikování importovaných a
Produktem DLL kompilace
== Odkazy ==
== Reference ==
<references/>
=== Literatura ===
* {{citace monografie
| příjmení = PETZOLD
| jméno = Charles
| titul = Programování ve Windows: legendární publikace o programování Win32 API
| překladatelé = Aleš Polcar, Jiří Veselský
| vydání = 1
| vydavatel = Computer Press
| místo = Praha
| rok = 1999
| rok copyrightu = 1999
| počet stran = 1216
| edice = Programování
| isbn = 80-7226-206-8
| poznámka = Obsahuje rejstřík
| jazyk = česky
}}
[[Kategorie:Souborové formáty]]
|