Hogyan működik a plugins - mindent róla, és a programozás

Azt megtette -, hogy válasszon a DLL a könyvtárat a program betölteni minden, és próbálja megtalálni benne a funkciója segítségével (API GetProcAddress) mereven előre nevét (például valami IsPluginForMyStuff típus). Ha találtak - DLL plugin tekinthető az enyém - ha nem, akkor a terhelést és elfelejteni.

Egy sor funkció okozta az ötlet ugyanaz az összes plug-inek, és szoftver (fő) tisztában, hogy milyen funkciók úgy néz ki, a DLL. Még ha ez nem, akkor semmi sem akadályozza meg meghatározni a bővítmény működnek, mint GetFeatures, ad egy listát a húrok, a nevét, a támogatott bővítmény eljárásokat.

Íme néhány a programkódot a plug-inek.

// eljárási típusok tárolni utalásokat a bővítmény funkcióval

TProcessProc = eljárás (config: pointer; kérelem: PRequest; var válasz: PReply);

TConfigProc = eljárás (defcfg: PSysConfig; var config: pointer);

TSaveLoadProc = eljárás (inifile: pointer; var config: pointer);

// Információ egyéni plug-in

Név: shortstring; // Teljes név

Fájlnév: shortstring; // fájl neve

Fogantyú: integer; // kezelje betöltött DLL

CFGSize: integer; // méretű konfiguráció RAM

// listája betöltött dugó

pgetn: TGetNProc; pgets: TGetSProc; plugin: PPlugin;

// olvassa el a dugó és hozzon létre egy listát a számukra.
Dugó: = TPlugins.Create;
ha FindFirst ( '* .dll', faAnyFile, sr)<> 0, akkor kezdődik

ShowMessage ( 'nem található plugins.');

A legfontosabb dolog, hogy tartsa szem előtt, amikor DLL - akkor nem engedheti meg egy helyzetet, amelyben minden kivételt maradna el nem kapott (köszönet Pat Ritchey ilyen bölcs tanácsot). A test az exportált függvények „wrap” minden blokk try..except (ami rendkívül feldolgozott D.

Remélem, hogy ez a két kis vonal a fő modulok a DLL (ha az nem tartalmazza a megszakítás kezelő): (* do fix résszel DLL adatroaming *) GlobalPageUnlock (DSeg); GlobalReAlloc (DSeg, 0, GMEM_MODIFY vagy GMEM_MOVEABLE); Ha nem helyezzük a CE.

Fájlok megosztása megjelenítési terület (Sharing mappolt fájlok). Nézze meg az alábbi kódot: var HMapping: THandle; PMapData: Pointer; const MAPFILESIZE = 1000; eljárás OpenMap; var llInit: Boole; lint: integer; kezdődik HMapping: = CreateFileMapping ($ FFFFFFFF, nulla, PAGE_READWRITE 0, MAPFI.

Hogyan lehet bezárni egy megnyitott fájl a DLL (létrehozott Delphi) és hívott VB? Ez egy ismert probléma. Ez abból adódik, hogy a VB akkor zár, amikor a DOS-5 szabvány megjelölések (0..4). Például egy program, hogy nyissa meg a fájlt, újra ezek használatát leíró, az első nyílt fi.

A probléma inkább a hacker, nem programozó. De vannak olyan helyzetek, amikor szükség van rá. Nehéz elképzelni egy olyan helyzetet, amelyben hasznos lehet, de például elfoghatja a fárasztó kell vásárolni egy doboz az alkatrész :). Természetesen ezt a kódot a célja, hogy szélesebb körben.