Importování a exportování
Můžete importovat veřejné symboly do aplikace nebo exportovat funkce z knihovny DLL pomocí dvou metod:
Použijte soubor definice modulu (.def) při sestavování knihovny DLL
Použijte klíčová slova __declspec(dllimport) nebo __declspec(dllexport) v definici funkce v hlavní aplikaci
Použití souboru .def.
Definiční soubor modulu (.def), je textový soubor obsahující jeden nebo více příkazů modulu, které popisují různé atributy knihovny DLL. Pokud nepoužíváte __declspec(dllimport) nebo __declspec(dllexport) pro exportování funkcí knihovny DLL, knihovna DLL vyžaduje soubor .def.
Můžete použít soubory .def pro importování do aplikace nebo exportování z knihovny DLL.
Použití __declspec
Visual C++ používá __declspec(dllimport) a __declspec(dllexport) pro nahrazení klíčového slova __export, které bylo dříve používáno v 16bitových verzích Visual C++.
Nemusíte ve vašem kódu používat __declspec(dllimport) pro správnou kompilaci, ale když tak učiníte, umožníte kompilátoru generovat lepší kód. Kompilátor je schopen generovat lepší kód, protože může určit, zda funkce v knihovně DLL existuje či nikoli, což umožňuje kompilátoru vytvoření kódu, který přeskakuje úroveň bezcílnosti, která by normálně byla ve volání funkce, které překračuje hranice knihovny DLL. Musíte však použít __declspec(dllimport) pro importování proměnných, použitých v knihovně DLL.
S řádným oddílem EXPORTS souboru .def není __declspec(dllexport) vyžadováno. __declspec(dllexport) byl přidán pro poskytnutí snadného způsobu exportování funkcí ze souboru .exe nebo .dll, bez použití souboru .def.
Formát přenositelného spustitelného souboru Win32 je navržen tak, aby minimalizoval počet stránek, které musí být dotčeny pro opravu importů. Pro toto provedení umístí všechny adresy importů na jedno místo pro libovolný program, které se nazývá tabulka adres importu. To umožňuje zavaděči upravit pouze jednu nebo dvě stránky při přístupu k těmto importům.