DLL (Dynamic Link Library) funguje jako sdílená knihovna funkcí, které lze vyvolat mnoha aplikacemi a jinými DLL. Delphi vám to dovolí vytvářet a používat DLL abyste mohli tyto funkce volat podle libosti. Než je však budete moci zavolat, musíte je importovat.
Funkce exportované z DLL lze importovat dvěma způsoby - buď deklarací externí procedury nebo funkce (statické), nebo přímým voláním na API specifické API (dynamické).
Uvažujme jednoduchou DLL. Níže je kód pro "circle.dll" exportující jednu funkci s názvem "CircleArea", která vypočítává plochu kruhu pomocí daného poloměru:
Jakmile máte circle.dll, můžete použít exportovanou funkci "CircleArea" z aplikace.
Statické načítání
Nejjednodušší způsob importu procedury nebo funkce je deklarovat ji pomocí externí směrnice:
Pokud toto prohlášení zahrnete do části rozhraní jednotky, je kruh.dll načten jednou při spuštění programu. V průběhu provádění programu je funkce CircleArea k dispozici všem jednotkám, které používají jednotku, kde je výše uvedené prohlášení.
Dynamické načítání
K rutinám v knihovně můžete přistupovat prostřednictvím přímých volání API API Win32, včetně LoadLibrary, FreeLibrary, a GetProcAddress. Tyto funkce jsou deklarovány v systému Windows.pas.
Jak volat funkci CircleArea pomocí dynamického načítání:
Při importu pomocí dynamického načítání DLL není načtena, dokud není vyvoláno LoadLibrary. Knihovna je uvolněna volání do FreeLibrary.
Při statickém načtení se načte DLL a její inicializační sekce se provedou před provedením inicializačních sekcí volající aplikace. Toto je obráceno dynamickým načtením.
Měli byste použít statický nebo dynamický?
Zde je jednoduchý pohled na výhody a nevýhody statického i dynamického načítání DLL:
Statické načítání
Profesionálové:
- Snadnější pro začínajícího vývojáře; žádné „ošklivé“ Volání API.
- DLL jsou načteny jen jednou, při spuštění programu.
Nevýhody:
- Aplikace chybí, pokud chybí nebo nelze najít žádné knihovny DLL. Zobrazí se chybová zpráva, jako je tato: "Start této aplikace se nezdařil, jelikož 'chybějící.dll' nebyl nalezen. Tento problém může vyřešit přeinstalování aplikace. “ Podle návrhu zahrnuje pořadí vyhledávání DLL se statickým propojením adresář, ze kterého aplikace načteno, systémový adresář, adresář Windows a adresáře uvedené v prostředí PATH proměnná. Upozorňujeme také, že pořadí hledání se může v různých verzích Windows lišit. Vždy očekávat, že všechny DLL v adresáři, kde je volající aplikace.
- Využívá se více paměti, protože všechny knihovny DLL jsou načteny, i když některé funkce .functions nebudete používat
Dynamické načítání
Profesionálové:
- Program můžete spustit, i když některé z knihoven, které používá, nejsou k dispozici.
- Menší spotřeba paměti, protože knihovny DLL se používají pouze v případě potřeby.
- Můžete zadat úplnou cestu k DLL.
- Lze použít pro modulární aplikace. Aplikace pouze vystavuje (načítá) moduly (DLL) "schválené" pro uživatele.
- Schopnost dynamicky načítat a uvolňovat knihovnu je základem systému plug-in, který vývojářům umožňuje přidávat do programů další funkce.
- Zpětná kompatibilita se staršími verzemi Windows, ve kterých systémové DLL nemusí podporovat stejné funkce nebo být podporovány stejným způsobem. Nejprve zjistíte verzi systému Windows a poté dynamicky propojíte na základě toho, na čem vaše aplikace běží verze systému Windows a poskytují řešení pro starší operační systémy (nebo přinejmenším elegantně deaktivující funkce, které nemůžete) Podpěra, podpora.)
Nevýhody:
- Vyžaduje další kód, což není vždy snadné pro začínajícího vývojáře.