Om Dynamic-Link bibliotek
Med dynamisk länkning kan en modul endast innehålla den information som behövs för att hitta en exporterad DLL-funktion vid inläsningstid eller körningstid. Dynamisk länkning skiljer sig från den mer välbekanta statiska länkningen, där länkaren kopierar en biblioteksfunktionskod till varje modul som anropar den.
Typer av dynamisk länkning
Det finns två metoder för att anropa en funktion i en DLL:
- Vid dynamisk länkning vid laddninggör en modul uttryckliga anrop till exporterade DLL-funktioner som om de vore lokala funktioner. Detta kräver att du länkar modulen med importbiblioteket för den DLL som innehåller funktionerna. Ett importbibliotek förser systemet med den information som behövs för att läsa in DLL:n och leta upp de exporterade DLL-funktionerna när programmet läses in.
- Vid dynamisk länkninganvänder en modul funktionen LoadLibrary eller LoadLibraryEx för att läsa in DLL-filen vid körningstid. När DLL-filen har lästs in anropar modulen funktionen GetProcAddress för att hämta adresserna för de exporterade DLL-funktionerna. Modulen anropar de exporterade DLL-funktionerna med hjälp av funktionspekare som returneras av GetProcAddress. Detta eliminerar behovet av ett importbibliotek.
DLL:er och minneshantering
Varje process som läser in DLL:en mappar den till dess virtuella adressutrymme. När processen har läst in DLL:en till sin virtuella adress kan den anropa de exporterade DLL-funktionerna.
Systemet upprätthåller ett referensantal per process för varje DLL. När en tråd läser in DLL:en ökas referensantalet med en. När processen avslutas eller när referensantalet blir noll (endast dynamisk körningslänkning) tas DLL-filen bort från processens virtuella adressutrymme.
Precis som andra funktioner körs en exporterad DLL-funktion i kontexten för den tråd som anropar den. Därför gäller följande villkor:
- Trådarna i processen som anropade DLL kan använda handtag som öppnas av en DLL-funktion. På samma sätt kan handtag öppnade av alla trådar i anropsprocessen användas i DLL-funktionen.
- DLL använder stacken för den anropande tråden och det virtuella adressutrymmet för anropsprocessen.
- DLL allokerar minne från det virtuella adressutrymmet i anropsprocessen.
Mer information om DLL:er finns i följande avsnitt:
- fördelar med dynamisk länkning
- Dynamic-Link Skapa bibliotek
- Dynamic-Link Bibliotek Entry-Point Funktion
- Load-Time dynamisk länkning
- Run-Time dynamisk länkning
- Dynamic-Link sökordning för bibliotek
- Dynamic-Link Biblioteksdata
- Dynamic-Link omdirigering av bibliotek
- Dynamic-Link biblioteksuppdateringar
- Dynamic-Link Bibliotekssäkerhet
- AppInit DLL:er och säker start