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.