A dll mint plugin-ek
A DLL mint PlugIn-s
A DLL mint PlugIn-s
A téma, hogy írjon cikkeket a „Hello World” van egy kérdés, a dinamikus könyvtárak és ShareMem modult. Szeretném bővíteni a szám a kérdést: Tegyük fel, hogy egy olyan rendszer kiépítését fájdalommentesen kiterjeszti a funkcionalitást. Kínálkozik megoldás - a dynamic link library. És mi a rake szétszórt ezen az úton?
Az én jelenlegi alkalmazási helye a kérdés egy ilyen rendszer alakult ki sokáig. És mivel ő nem fog süllyedni, meg kellett olyan rendszert hozzon létre. Tehát minden az alábbiakban meghatározott - saját tapasztalat.
Használja-e ShareMem - dolgozzon ki egy speciális nyilatkozatot a problémát. Ha meg tudod csinálni anélkül, hogy az ilyen juttatások, majd előre, a dal! Egyébként akkor meg a programot, hogy készítsen borlndmm.dll, amely fájdalommentes, és megvalósítja a csere könyvtárak közötti mutatók.
Felmerül a kérdés, hogy „Miért?”. És kap választ, „Ez az!”. Úgy tűnik, Delphi együttműködik Heap (kupac, ahonnan memóriát) a maga módján. Néhány évvel ezelőtt beszéltünk ebben a munkában, mászik a forráskódot, és nem jött a konszenzus. De van spekuláció, hogy a Delphi osztja csak egy nagy darab memória a kupac, majd később a kérelem csökkenti a szükséges darabokat, és ezzel nem bízik a rendszer memóriát. Talán nem ez a helyzet, és ha valaki a csípés, én hálás lesz. Egyébként - van egy probléma, és a megoldás is rendelkezésre áll.
A véletlen a neve tulajdonság a különböző ablakok okoz kivételt. Annak elkerülése érdekében, ez nem nehéz, és a hiba nyilvánvalóan annak a ténynek köszönhető, hogy a különböző típusú osztályok ugyanazt a nevet az azonos tartályban.
Elég fontos a megsemmisítése az ablak kirakodás előtt a könyvtár és a befejezése a program. Delphi ellazítja: dedikált erőforrások ellenőrzésére nincs szükség, az ablakok maguk hozzák létre, és megsemmisült, és sokkal több történik a programozót. Nakidal komponentikov, ő teremtett kapcsolatot, és kész. Képviseli könyvtár kirakják a könyvtár ablak létezik a könyvtári rendszer már tisztítani leírások, de a többi resursiki és mi történik? Delphi öt másodpercig záráskor lefagy a program, majd a „Hozzáférés megsértése.” További cenzúra.
Ez már nem látható rake. És azt mondta, - súlyos problémákat nem az egyetlen dolog, amit meg kell írni szépen, szöveg nyalás, és arra gondolni, gyakrabban.
Az épület program Plug In-s
Talán 2 megközelítés az építőiparban egy ilyen program- plugins kap információt a központi program, de nem foglalkoznak a mag. Hívjuk ezt a megközelítést passzív.
- Aktívan megközelítés plugins kezdeményezni néhány esemény, és azokat hallgatni a mag.
A második megközelítés megköveteli kifinomultabb algoritmikus konstrukció, úgyhogy úgy csak az első.
Tegyük fel, hogy van egy program, amely képes kapcsolódni dinamikus könyvtárakat (bármilyen). De ahhoz, hogy hatékonyan működjön, szükséges, hogy a könyvtár szabványos felületet biztosít az adatátvitelhez. Orosz, léteznie kell egy szabványos funkciók által exportált könyvtár, amelyen keresztül a program kommunikálni velük.
A folyamat során világossá vált, hogy a passzív modell elegendő 6 funkció:- Első belső információt a bővítmény (a program funkció GetModuleInfo: TModuleInfo). Jelenlétében egy ilyen funkció a könyvtárban és jobbra is nevezzük, akkor tudni fogjuk, hogy ez a DLL - a beépülő modul. A funkció vissza semmit, mint a név, és a dugó típusától.
- Képződése a kezdeti értékek (az eljárás inicializálása program). Plug vezet magukat annak érdekében, terhelés után, azaz kitölti változók alapértelmezett értékeit.
- Adatátvitel a plug-in (a programban eljárás SetData (Fajta: TDataKind; const Buffer; Méret: Egész szám)). Ez lehetővé teszi az adatátvitelt a plugin.
- Adatok fogadása - A program nem valósul meg, de a SetData típusát.
- A bővítmény (a Run Program). Fut dugó. Hozzászólások különböző lehet: a show ablakban megjelenik egy modális ablak, a számítás egy paraméter, stb
- És esesno dugó stop. Itt lépést hátra 2. lépés.
Egy kis hangsúly az adattovábbítás. Pascal annak minden kemény gépelési biztosít kellemes adatátviteli eszközöket funkció típustalan adatokat. Ha a program pontosan tudja, hogy milyen adatokat jött ottipizirovat :) egyszerűen elég. Ezt az átviteli módszert alkalmazzák SetData. A SharedTypes.Pas modul által használt mindhárom ismertetett projektek TDataKind megfelelő állandók a továbbított adatok típusát.
Most, a végrehajtásáról
Hagyja, hogy a kernel, azaz exe-file kereső plugins elindítja őket, és továbbítja az időzítő ott két digitális értékeket jelentik az egyik dugó szöveges formában, a második formájában diagramok. Végrehajtását a különböző plug-inek minimális, ezért meg kell mondani egy - Digital.dll. Kezdődik a feladatok átadását:
A függvény visszaküldi információt egy modult. Ebben az esetben a digitális kijelző, az útvonalat és a modul típusát.
Pályázati eljárás tárolja a változó és teszi a nulla alakjára utal a dugót.
Az eljárás indításának a plugin egy ablakot hoz létre. Az ablak létrehozásakor látható.
Az eljárás elpusztítja az ablakot, és visszatér a régi TApplication.
Megszerzésére irányuló eljárás adatait. Attól függően, hogy milyen típusú a vett adatokat az adatokat változó puffer tipizálható volt. Itt van egy utalás formájában plug-in, festeni, nem fogok, ez egyszerű, lásd. Forrás. A típusok, amelyek jelen leírásban leírt SharedTypes.pas
Plug-inek, ez minden.
Mint látható a képen, ez egy egyszerű add-on plug-in nem tesz hozzá a funkcionalitás, de lehetővé teszi, hogy tárolja az összes egy oldalon.
Most már csak azt kell összeszerelni és bővítmények futtatását. Az információk összegyűjtése és indítás, nyomja meg a gombot, az azonos nevű a fő formája. Hogyan gyűjtsünk plugins - ízlés dolga. Ebben a példában azt beolvasni a megadott könyvtárban, akkor tárolja az INI-fájlok, a rendszerleíró adatbázisban, akkor gondolom a tárolási formátum. Gyűjtemény plug-inek:
Célszerű, hogy ne felejtsük el, a kibocsátás a modulokat. Ez a legvégén (lásd. A forráskód).
És ez hogyan is néz ki.
Ebben a szövegben idézett gerincét egy lehetséges megoldás, hogy az építkezés a moduláris rendszer. Kérdések, javaslatok és érkezések elfogadunk.
Maxim Mazitov
Különösen Delphi Királyság