Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Windowsban a dinamikus csatolású kódtár (DLL) egyfajta végrehajtható fájl, amely függvények és erőforrások megosztott táraként működik. A dinamikus összekapcsolás az operációs rendszer képessége. Lehetővé teszi a végrehajtható függvények meghívását vagy egy külön fájlban tárolt erőforrások használatát. Ezek a függvények és erőforrások külön fordíthatók és helyezhetők üzembe az őket használó végrehajthatóktól függetlenül.
A DLL nem önálló végrehajtható. A DLL-ek az őket meghívó alkalmazások környezetében futnak. Az operációs rendszer betölti a DLL-t egy alkalmazás memóriájába. Ez az alkalmazás betöltésekor (implicit csatolás) vagy igény szerint, futtatókörnyezetben (explicit csatolás) történik. A DLL-ek megkönnyítik a függvények és erőforrások végrehajtható fájlok közötti megosztását is. Egyszerre több alkalmazás is hozzáférhet egy DLL egyetlen másolatának tartalmához a memóriában.
A dinamikus csatolás és a statikus csatolás közötti különbségek
A statikus csatolás a statikus kódtár összes objektumkódját átmásolja azokba a végrehajtható fájlokba, amelyek használatban vannak a létrehozásakor. A dinamikus csatolás csak a Windows által futtatáskor szükséges információkat tartalmazza az adatelemet vagy függvényt tartalmazó DLL megkereséséhez és betöltéséhez. DLL létrehozásakor egy importálási kódtárat is létrehoz, amely tartalmazza ezeket az információkat. Amikor létrehoz egy végrehajtható fájlt, ami meghívja a DLL-t, az összekapcsoló program az importálási könyvtárban lévő exportált szimbólumokat használja fel, hogy tárolja ezeket az információkat a Windows betöltő számára. Amikor a betöltő betölt egy DLL-t, a DLL az alkalmazás memóriaterületére lesz leképezve. Ha van ilyen, a DLL-ben egy speciális függvényt hívunk meg a DllMainDLL által igényelt inicializáláshoz.
Alkalmazások és DLL-ek közötti különbségek
Annak ellenére, hogy a DLL-ek és az alkalmazások egyaránt végrehajtható modulok, többféleképpen különböznek egymástól. A legnyilvánvalóbb különbség az, hogy nem futtathat DLL-t. A rendszer szempontjából két alapvető különbség van az alkalmazások és a DLL-ek között:
Egy alkalmazás egyszerre több példányt is futtathat a rendszerben. A DLL-nek csak egy példánya lehet.
Egy alkalmazás betölthető folyamatként. Olyan dolgokat birtokolhat, mint a verem, a végrehajtási szálak, a globális memória, a fájlkezelők és az üzenetsor. A DLL nem birtokolhatja ezeket a dolgokat.
A DLL-ek használatának előnyei
A kódhoz és erőforrásokhoz való dinamikus csatolás számos előnnyel jár a statikus csatolással szemben:
A dinamikus összekapcsolás memóriát takarít meg, és csökkenti a felcserélést. Számos folyamat egyszerre használhat DLL-t, és egyetlen másolatot oszthat meg a DLL írásvédett részeiről a memóriában. Ezzel szemben minden statikusan csatolt kódtár használatával létrehozott alkalmazás rendelkezik a Windows által a memóriába betöltendő kódtár kódjának teljes másolatával.
A dinamikus csatolással lemezterületet és sávszélességet takaríthat meg. Számos alkalmazás megoszthatja a DLL egyetlen példányát a lemezen. Ezzel szemben minden statikus hivatkozástár használatával létrehozott alkalmazás rendelkezik a végrehajtható lemezképhez csatolt kódtárkóddal. Ez több lemezterületet használ, és több sávszélességet igényel az átvitelhez.
A karbantartás, a biztonsági javítások és a frissítések egyszerűbbek lehetnek. Ha az alkalmazások gyakran használt függvényeket használnak egy DLL-ben, hibajavításokat implementálhat, és frissítéseket helyezhet üzembe a DLL-ben. A DLL-ek frissítésekor az őket használó alkalmazásokat nem kell újrafordíteni vagy újrakonlinkolni. Az üzembe helyezés után azonnal használhatják az új DLL-t. Ezzel szemben, ha statikusan csatolt objektumkódban javít, újra össze kell kapcsolnia és újra kell telepítenie az azt használó összes alkalmazást.
DLL-eket használhat a piac utáni támogatás biztosításához. A megjelenítési illesztőprogram DLL-je például módosítható, hogy támogassa az alkalmazás kiszállításakor nem elérhető megjelenítést.
Explicit csatolással felderítheti és betöltheti a DLL-eket futásidőben. Például olyan alkalmazásbővítmények, amelyek új funkciókat adnak hozzá az alkalmazáshoz újraépítés vagy ismételt üzembe helyezés nélkül.
A dinamikus csatolás megkönnyíti a különböző programozási nyelveken írt alkalmazások támogatását. A különböző programozási nyelveken írt programok meghívhatják ugyanazt a DLL-függvényt, ha a programok a függvény hívási konvencióját követik. A programoknak és a DLL-függvénynek a következő módokon kell kompatibilisnek lenniük: Az a sorrend, amelyben a függvény az argumentumok verembe való leküldését várja. Függetlenül attól, hogy a függvény vagy az alkalmazás felelős-e a verem tisztításáért. Illetve, hogy meg vannak-e adva argumentumok a regiszterekben.
A dinamikus csatolás lehetővé teszi a Microsoft Foundation Class Library (MFC) osztályainak kiterjesztését. Az osztályokat a meglévő MFC-osztályokból származtathatja, és elhelyezheti őket egy MFC-bővítmény DLL-fájljában az MFC-alkalmazások számára.
A dinamikus csatolás megkönnyíti az alkalmazás nemzetközi verzióinak létrehozását. A DLL-ek kényelmesen biztosítják a területi beállításokra vonatkozó erőforrásokat, amelyek megkönnyítik az alkalmazások nemzetközi verzióinak létrehozását. Az alkalmazás számos honosított verziójának szállítása helyett az egyes nyelvek sztringeit és lemezképeit külön erőforrás DLL-fájlba helyezheti. Ezután az alkalmazás futásidőben betöltheti az adott területi beállításhoz szükséges erőforrásokat.
A DLL-ek használatának egyik lehetséges hátránya, hogy az alkalmazás nem önálló. A telepítés részeként Önnek kell telepítenie vagy ellenőriznie a különálló DLL-modul meglétét.
További információ a DLL-ek létrehozásáról és használatáról
Az alábbi cikkek részletes információkat tartalmaznak a C/C++ DLL-ek Visual Studióban való létrehozásáról.
Útmutató: Dinamikus csatolási kódtár létrehozása és használata (C++)
Ismerteti, hogyan hozhat létre és használhat DLL-t a Visual Studióval.
A DLL-ek típusai
Információt nyújt a létrehozható dll-ek különböző típusairól.
DLL– gyakori kérdések
Választ ad a DLL-ekkel kapcsolatos gyakori kérdésekre.
Végrehajtható fájl csatolása DLL-hez
A DLL-hez való explicit és implicit csatolást ismerteti.
DLL inicializálása
Ismerteti a DLL-inicializálási kódot, amelyet a DLL betöltésekor végre kell hajtani.
A DLL-ek és a Microsoft C++ futásidejű kódtár viselkedése
A futásidejű kódtár DLL indítási sorozatát ismerteti.
LoadLibrary és AfxLoadLibrary
Egy DLL-hez való explicit csatolásról értekezik LoadLibrary és AfxLoadLibrary használatával futásidőben.
GetProcAddress
A GetProcAddress használatát tárgyalja egy exportált függvény címének a DLL-ben való megszerzéséhez.
FreeLibrary és AfxFreeLibrary
Ismerteti, hogy mikor és hogyan kell használni a FreeLibrary és AfxFreeLibrary címkéket, amikor a DLL-modulra már nincs szükség.
Dynamic-Link Könyvtár keresési sorrend
Azt a keresési útvonalat ismerteti, amelyet a Windows operációs rendszer használ egy DLL megkereséséhez a rendszeren.
Az MFC-hez dinamikusan kapcsolódó rendszeres MFC DLL modulállapotai
Az MFC-hez dinamikusan kapcsolódó normál MFC DLL modulállapotait ismerteti.
MFC-bővítmény DLL-ek
Ismerteti azokat a DLL-eket, amelyek általában a meglévő MFC-osztályokból származó újrafelhasználható osztályokat implementálnak.
Csak erőforrás-alapú DLL létrehozása
Egy csak erőforrással rendelkező DLL-t tárgyal, amely csak erőforrásokat tartalmaz, például ikonokat, bitképeket, sztringeket és párbeszédpaneleket.
Honosított erőforrások az MFC-alkalmazásokban: Műholdas DLL-ek
Továbbfejlesztett támogatást nyújt a műholdas DLL-ekhez, amely segít a több nyelvre honosított alkalmazások létrehozásában.
Importálás és exportálás
A nyilvános szimbólumok alkalmazásba való importálását vagy függvények DLL-ből való exportálását ismerteti
Aktív technológia és DLL-ek
Lehetővé teszi az objektumkiszolgálók DLL-ben való implementálását.
Automatizálás DLL-ben
Az MFC DLL varázsló Automation opciójának leírása.
Elnevezési konvenciók az MFC DLL-ekhez
Azt ismerteti, hogy az MFC-ben szereplő DLL-ek és kódtárak hogyan követik a strukturált elnevezési konvenciót.
DLL-függvények meghívása Visual Basic-alkalmazásokból
Ismerteti, hogyan hívhat meg DLL-függvényeket a Visual Basic-alkalmazásokból.
Kapcsolódó szakaszok
MFC használata DLL-ként
A szokásos MFC DLL-eket ismerteti, amelyek lehetővé teszik az MFC-kódtár használatát egy Windows dinamikus csatolású kódtár részeként.
Az MFC DLL-verziója
Ismerteti, hogyan használhatja a MFCxx.dll és MFCxxD.dll (ahol x az MFC-verziószám) megosztott dinamikus csatolású kódtárakat MFC-alkalmazásokkal és MFC-bővítmény DLL-ekkel.