Informace o knihovnách Dynamic-Link
Dynamické propojení umožňuje modulu zahrnout pouze informace potřebné k vyhledání exportované funkce dynamické knihovny při načtení nebo za běhu. Dynamické propojení se liší od běžnějšího statického propojení, ve kterém linker zkopíruje kód funkce knihovny do každého modulu, který ho volá.
Typy dynamického propojení
Existují dvě metody volání funkce v knihovně DLL:
- V dynamické propojení za běhu načítánímodul provádí explicitní volání exportovaných funkcí knihovny DLL, jako by šlo o místní funkce. To vyžaduje, abyste modul propojili s knihovnou importu pro knihovnu DLL, která obsahuje funkce. Knihovna importu poskytuje systému potřebné informace pro načtení knihovny DLL a vyhledání exportovaných funkcí knihovny DLL při načtení aplikace.
- V dynamické propojení za běhu používá modul LoadLibrary nebo LoadLibraryEx funkci načtení knihovny DLL za běhu. Po načtení knihovny DLL modul zavolá funkci GetProcAddress k získání adres exportovaných funkcí DLL. Modul volá exportované DLL funkce pomocí ukazatelů funkcí vrácených GetProcAddress. Tím se eliminuje potřeba knihovny importu.
Knihovny DLL a správa paměti
Každý proces, který načte knihovnu DLL, ji namapuje do svého virtuálního adresního prostoru. Jakmile proces načte knihovnu DLL do své virtuální adresy, může volat exportované funkce knihovny DLL.
Systém udržuje referenční počet jednotlivých procesů pro každou knihovnu DLL. Když vlákno načte knihovnu DLL, zvýší se počet odkazů o jeden. Když se proces ukončí nebo když se počet odkazů změní na nulu (pouze dynamické propojení za běhu), knihovna DLL se uvolní z virtuálního adresního prostoru procesu.
Stejně jako jakákoli jiná funkce se exportovaná funkce DLL spouští v kontextu vlákna, které ji volá. Proto platí následující podmínky:
- Vlákna procesu, který volal knihovnu DLL, mohou používat popisovače otevřené funkcí knihovny DLL. Podobně lze obslužné rutiny otevřené libovolným vláknem volajícího procesu použít ve funkci DLL.
- Knihovna DLL používá zásobník volajícího vlákna a virtuální adresní prostor volajícího procesu.
- Knihovna DLL přiděluje paměť z virtuálního adresního prostoru volajícího procesu.
Další informace o knihovnách DLL najdete v následujících tématech:
- výhody dynamického propojení
- Dynamic-Link vytvoření knihovny
- Dynamic-Link knihovna Entry-Point funkce
- Load-Time dynamické propojení
- Run-Time dynamické propojení
- Dynamic-Link pořadí hledání knihovny
- Dynamic-Link Data knihovny
- Dynamic-Link přesměrování knihovny
- Dynamic-Link Aktualizace knihovny
- Dynamic-Link zabezpečení knihovny
- knihovny DLL appInit a zabezpečené spouštění