Statické vs dynamické načítání DLL pomocí Delphi

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

instagram viewer

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.
instagram story viewer