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ó:
  1. 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.
  2. 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.
  3. 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.
  4. Adatok fogadása - A program nem valósul meg, de a SetData típusát.
  5. 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
  6. É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.

A dll mint plugin-ek

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