dll Fejlesztési Borland Delphi

DLL Fejlesztési Borland Delphi

Calling eljárások és függvények kerültek a DLL.

Hívhatjuk eljárások és függvények attól függ, hogyan töltse be dinamikus könyvtár, amelyben ezek az eljárások.







Külső kulcsszó mondja a fordítónak, hogy ez az eljárás megtalálható a dynamic link library (ebben az esetben - myfirstdll.dll). Következő, hívja az eljárás a következő:

Amikor importáló funkciók és eljárások, különösen óvatos írásakor nevüket és interfészek! A tény az, hogy a folyamat összeállítása kérelmet nem pontosságának ellenőrzését a tárgy nevét, amelyek kivitele a DLL, nem kell elvégezni, és ha helytelenül leírt néhány funkció, akkor kivételt csak akkor képződik, a futás során.

Import a DLL végezhetjük nevében az eljárás (függvény), a sorozatszámot, vagy beállít egy másik nevet.

Az első esetben, akkor egyszerűen nyilvánítja az eljárás nevét és a könyvtár, ahonnan az import (ahogy megbeszéltük fölött). sorrendi Import meg kell adnia ezt ugyanabban a szobában:

Ebben az esetben a nevet adja, hogy az eljárást a behozatali nem feltétlenül esik egybe azzal, amit megadott azt a legtöbb DLL. Ie Jegyezzük fel a fenti eszközöket, hogy importál myfirstdll.dll dynamic link library eljárást, hogy exportálták a tizenötödik, és ugyanabban az időben, mint a kérelme részeként ezt az eljárást nevet kapta sayHello.

Ha valamilyen okból nem vonatkoznak import fent leírt módszer, de ennek ellenére szeretnénk változtatni a nevét, az importált funkció (eljárás), akkor egy harmadik módszer:

Itt importált CoolProcedure eljárás nevet kapta DoSomethingReallyCool. Calling eljárások és függvények importált dinamikus csatolású könyvtárak kissé bonyolultabb, mint azt tartják fent említett módszerrel. Ebben az esetben szükség van arra, hogy egy mutató egy függvény vagy eljárás, amely a használni kívánt. Emlékezz HelloWorld eljárás? Lássuk, mit kell tennie ahhoz, hogy okozhat, hogy végezze el abban az esetben, dinamikus terhelés DLL. Először is, meg kell, hogy állapítsa meg a típus, amely leírja ezt az eljárást:

Most meg kell tölteni egy dynamic link library segítségével GetProcAddress szerezni mutató egy eljárás hívás ez az eljárás elvégzésére, és végül eltávolítani a DLL a memóriából. A következő kód azt mutatja, hogyan lehet ezt megtenni:

Mint már említettük, az egyik hátránya a DLL statikus terhelést a képtelenség, hogy továbbra is a kérelem hiányában egy vagy több könyvtárat. Abban az esetben, dinamikus terhelés, akkor lehetősége van a szoftver, hogy kezelni az ilyen helyzeteket, és ne engedje, hogy a program „esik ki” a saját. Szerint a visszaadott funkciók LoadLibrary és GetProcAddress értékeket lehet meghatározni, hogy sikeresen a könyvtár betöltése, és hogy szükséges a pályázati eljárást találtak. A következő kód mutatja ezt.

A DLL tárolható nemcsak kódot, hanem a forma. És létrehozását és elhelyezését formák dinamikus könyvtár nem túl sokban különbözik a dolgozó formák normális projektben. Először is, nézzük meg, hogyan kell írni egy könyvtár, amely a forma, aztán majd beszélünk a MDI technológia a DLL.







DLL fejlesztés, tartalmazó formában, azt bemutatja példával.

Tehát, először hozzon létre egy új projekt dinamikus könyvtár. Ehhez válassza ki a menüpontot a Fájl | Új pontjára, majd kattintson duplán az ikonra a DLL. Akkor látni valamit, mint az alábbi kódot:

Mentse el a projektet. Nevezzük DllForms.dpr.

Most létre kell hozni egy új formája. Ezt meg lehet tenni a különböző módon. Például a menüpont kiválasztása File | New Form. Add bármely komponens formájában. Hívjuk alakja DllForm és a Save the modul néven DllFormUnit.pas.

Térjünk vissza a fő modul a projekt, és tegyük a funkció ShowForm, amelynek a feladata az lesz, hogy hozzon létre egy űrlapot, és a kimenetét a képernyőre. Az alábbi kóddal.

Vegye figyelembe, hogy a projekt került összeállításra hiba nélkül, akkor meg kell adni a felhasználási szakaszban a Forms modul.

Mi export funkció a kulcsszó export:

Fordítsuk le a projekt, és kap dllforms.dll fájlt. Ezek az egyszerű lépések - mindössze annyit kell tennie, hogy hozzon létre egy dinamikus könyvtár, amely a forma. Vegye figyelembe, hogy ShowForm funkció nyilvánították a kulcsszó stdcall. Ez jelzi, hogy a fordító használni, ha az exportáló funkciók megállapodás a szokásos hívás (normál hívás hívási konvenció). Export funkciók így megteremti a lehetőségét, hogy a fejlett DLL nem csak alkalmazások által létrehozott Delphi.

Szintén fontos megjegyezni, hogy a visszatérési értéke ShowForm. megfelel ShowModal. Így információkat küld az állam a hívó jelentkezési lapot.

Az alábbiakban felsoroljuk az két, az első, amely tartalmazza a teljes kód a DLL projekt fájl (modulok formájában itt nem szerepel), és a második - egy modult a hívó alkalmazás, mellyel csak az, hogy az általunk kifejlesztett egy könyvtár.

Felhívjuk figyelmét, hogy az exportáló funkciót is használt kulcsszó stdcall.

Meg kell különös figyelmet fordít a munkát a gyermek formában a DLL. Ha például a hívó alkalmazás fő formája értéke FormStyle egyenlő MDIForm, amikor megpróbálja hívni DLL MDIChild-formájú, akkor megjelenik egy hibaüzenet, amely lehet beszélni, hogy nincs aktív MDI-forma.

Abban a pillanatban, amikor megpróbálta megmutatni a gyermek az ablakban a VCL érvényesíti ingatlan FormStyle alkalmazás fő formája. Azonban ebben az esetben úgy tűnik, minden rendben. Tehát mi a helyzet? A probléma az, hogy az ilyen ellenőrzés elvégzése, az Application objektum látható, nem tartozik a hívó alkalmazás és a tényleges dinamikus könyvtár. Nos, természetesen, mert a DLL nem a fő formája, ellenőrzés sikertelen. Annak érdekében, hogy egy ilyen helyzetben, meg kell rendelni az Application objektum dynamic link library Application objektum a hívó alkalmazásnak. Természetesen ez csak akkor működik, ha a hívó fél - VCL-alkalmazás. Ezen túlmenően, kirakodás előtt a könyvtár memória szükséges, hogy visszatérjen az érték az Application objektum könyvtár az eredeti állapotába. Ez lehetővé teszi, hogy a memória menedzser, hogy törölje a memóriát foglal el a könyvtárban. Ezért meg kell tárolni egy mutatót a „bennszülött”, hogy az Application objektum könyvtár egy globális változó, hogy lehet használni a helyreállítási értéke.

Tehát menj vissza egy kicsit, és a következő lépéseket kell dolgozni elhelyezett DLL MDIChild-formákat.
  1. Egy dinamikus könyvtár, hozzon létre egy globális változó típusú TApplication.
  2. Mentse el a mutatót az objektum alkalmazás DLL a globális változót.
  3. Application objektum dinamikus könyvtár társítunk egy mutatót a kérelmet a hívó alkalmazásnak.
  4. Készítsen MDIChild alakja van, és dolgozni vele.
  5. Visszatérünk az eredeti állapotába érték Application objektum dynamic link library DLL és törlődik a memóriából.
Az első lépés az egyszerű. Csak helyezze be az alábbi kódot a tetején a DLL modul:

Ezután hozzon létre egy eljárást, amely meg fogja változtatni az értékét az Application objektum, és hozzon létre egy gyermek formájában. Az eljárás a következőképpen néz ki:

Minden most kell tennie - az, hogy a visszatérő értéke az Application objektum az eredeti állapotába. Ezt használja MyDllProc eljárás:

Segítségével dinamikusan első pillantásra. DLL egy nagyszerű módja annak, hogy optimalizálják az alkalmazások teljesítményét, valamint a tervezők munkáját magukat. Felhasználási DLL és talán az életét könnyebbé válik!

További információért, kérjük, forduljon a cég Interface Kft