Dll használata és létrehozása delphi-ban

A programozó feleségét megkérdezték:
- Hogy vigyázott rád?
Feleség, egy pillanatnyi meditáció után:
- Nos, a számítógép megmutatta.

Alkalmazások DLL-ekre

Tehát miért van szükségünk DLL-re és hol használjuk őket? Csak néhány alkalmazási területet sorolunk fel:

Egyéni könyvtárak Hasznos kiegészítő funkciókat tartalmaznak a programozók számára. Például a karakterláncokkal való munkafunkciók, vagy - összetett könyvtárak a képek konvertálásához. Erőforrás-tárolók A DLL-ben nem csak programokat és funkciókat, hanem különböző forrásokat is tárolhat - ikonok, rajzok, karaktersorozatok, menük stb. Támogatott könyvtárak Például ilyen könyvtárak olyan ismert csomagok, mint: DirectX, ICQAPI (API for ICQ), OpenGL stb. Például egy DLL-ben tárolhatja a program-ablakokat (űrlapokat), és így tovább. Plugins (Plugins) Ez az a hely, ahol a programozó gondolatai valóban helyet kapnak! A bővítmények kiegészítik a programot, amely kiterjeszti a képességeket. Például ebben a cikkben megnézzük azt a elméletet, hogy létrehozzunk egy plug-inet a saját programunkhoz. A megosztott DLL-erőforrás (Dynamic Link Library) egyszerre több program vagy folyamat (az úgynevezett megosztás-megosztott erőforrás)

A DLL-kkel való együttműködéshez szükséges funkciók és technikák rövid leírása

Szóval, milyen trükkök és funkciók szükségesek a DLL használatához? Elemezzük a függvények importálásának két módját a könyvtárból:

1 módon. Bind DLL a programhoz.

Ez a legegyszerűbb és legegyszerűbb módszer a DLL-ből importált funkciók használatához. Azonban (és figyelmet kell fordítani erre), ez a módszer nagyon jelentős hátrány - ha a program könyvtárát nem találja meg, a program egyszerűen nem indul el, hibát ad ki és azt jelenti, hogy a DLL-erőforrás nem található. A könyvtárat keresik: az aktuális könyvtárban, a programkönyvtárban, a WINDOWS \ SYSTEM könyvtárban stb. Tehát a kezdők számára - ez a technika általános formája:

FunctionName (vagy ProcedureName) a programban használni kívánt függvény (vagy eljárás) neve; Par1, Par2. a funkció vagy eljárás paramétereinek neve; Par1Type, Par2Type. a funkcióparaméterek vagy eljárások típusai (pl. Integer); ReturnType a visszatérési típus (csak a függvényhez); stdcall direktíva, amely pontosan megegyezik a DLL-ben alkalmazottal; külső "DLLNAME.DLL" direktíva, amely jelzi a külső DLL nevét, amelyből ez a függvény vagy eljárás importálódik (ebben az esetben DLLNAME.DLL); név "FunctionName" ("ProcedureName"), amely meghatározza a funkció pontos nevét a DLL-ben. Ez egy opcionális irányelv, amely lehetővé teszi, hogy egy olyan függvényt használjon a programban, amelynek neve nem egy valódi (a könyvtárban található); Index FunctionIndex (ProcedureIndex) irányelv, amely egy függvény vagy eljárás sorozatszámát jelzi a DLL-ben. Ez egy opcionális irányelv is.

2 irányban. DLL dinamikus betöltése

Ez sokkal bonyolultabb, de még elegánsabb módszer. Hiányzik az első módszer hátránya. Az egyetlen dolog, ami kellemetlen a kód végrehajtásához szükséges kód összege, és a nehézség az, hogy a DLL-ből importált függvény csak akkor érhető el, ha a DLL betöltődik és memóriában van. Láthatja az alábbi példát, de mostanáig - a módszer által használt WinAPI függvények rövid leírása:

LoadLibrary (LibFileName: PChar) betölti a megadott LibFileName könyvtárat a memóriába. A sikeres befejezés után a függvény visszaad egy fogantyút (THandle) a DLL memóriába. A GetProcAddress (Modul: THandle; ProcName: PChar) elolvassa a lejárt könyvtárfunkció címét. A sikeres befejezés után a függvény visszaadja a függvény fogantyúját (TFarProc) a betöltött DLL-ben. A FreeLibrary (LibModule: THandle) érvényteleníti a LibModule-t és szabadítja fel a hozzá kapcsolódó memóriát. Megjegyzendő, hogy az eljárás hívása után a könyvtár funkciói már nem állnak rendelkezésre.

Gyakorlat és példák

Nos, itt az ideje, hogy néhány példát használjunk a fenti módszerek és technikák használatára:

Példa 1. DLL megkötése a programhoz

Kapcsolódó cikkek