EXPORTY
Představuje část jeden nebo více export definice, které zadejte exportované názvy nebo pořadí funkcí nebo data.Každá definice musí být na samostatném řádku.
EXPORTS
definition
Poznámky
První definition může být na stejném řádku jako EXPORTS klíčové slovo nebo na další řádek.Je. DEF soubor může obsahovat jednu nebo více EXPORTS příkazy.
Syntaxe pro export definition je:
entryname[=internalname] [@ordinal [NONAME]] [[PRIVATE] | [DATA]]
entryname je název proměnné nebo funkce, které chcete exportovat.Toto je nezbytné.Pokud název, který je exportovat se liší od názvu v knihovně DLL, zadejte název s exportem v knihovně DLL pomocí internalname.Například, pokud vaše knihovna DLL exportuje funkci func1 a chcete jej používat jako volajícím func2, byste měli zadat:
EXPORTS
func2=func1
Vzhledem k tomu, že kompilátor Visual C++ používá název dekorace pro funkcí jazyka C++, je nutné použít upravený název, jako entryname nebo internalname, nebo definujte exportovaných funkcí pomocí extern "C" ve zdrojovém kódu.Kompilátor také upraví funkce jazyka C, které používají __stdcall s předponu podtržítko (_) a příponou tvořený konvence volání znak (@), za nímž následuje počet bajtů (v desetinné číslo) v seznamu argumentů.
Chcete-li najít upravený název vytvořeného kompilátor, použijte DUMPBIN nástroj nebo propojovací program /MAP možnost.Upravený názvy jsou specifické pro kompilátor.Při exportu upravený názvy v. DEF souborů spustitelné soubory, které na knihovnu DLL musí být sestaven také pomocí stejnou verzi kompilátor.To zajistí, že se upravený názvy volající shodují exportované názvy v. DEF soubor.
Můžete použítordinal k určení, že číslo a není název funkce, přejde do tabulky exportu knihovny DLL.Mnoho knihoven DLL Windows exportovat pořadí pro podporu staršího kódu.Bylo společné pro použití pořadí v 16bitové kód systému Windows, protože můžete minimalizovat velikost knihovny DLL.Nedoporučujeme export podle řadu funkcí, není-li vaše knihovna DLL klientů potřebuje pro podporu starších.Protože. Soubor LIB bude obsahovat mapování mezi řadová číslovka a funkci, můžete použít název funkce jako obvykle v projektech, které používají knihovny DLL.
Pomocí volitelného NONAME klíčové slovo, které je možné exportovat podle pořadí pouze a zmenšit velikost export tabulky v výsledný knihovny DLL.Nicméně pokud chcete použít GetProcAddress v knihovně DLL, je třeba znát řadová číslovka vzhledem k tomu, že název již nebudou platit.
Volitelné klíčové slovo PRIVATE brání entryname zahrnuto v knihovně importu generovaných odkaz.Export do obrazu také generovaných odkaz nemá vliv.
Volitelné klíčové slovo DATA Určuje, že vývozní data a ne kód.Tento příklad ukazuje, jak může exportovat data proměnnou s názvem exported_global:
EXPORTS
exported_global DATA
Chcete-li exportovat definici uvedené v doporučeném pořadí čtyřmi způsoby:
__Declspec(dllexport) klíčové slovo ve zdrojovém kódu
EXPORTS v prohlášení. DEF souborů
/EXPORT specifikace v příkazu odkaz
Objekt komentář směrnice ve zdrojovém kódu, formuláře #pragma comment(linker, "/export:definition")
Všechny čtyři metody lze v jednom programu.Při odkazu sestavení program, který obsahuje vývozu, vytvoří také knihovnu importu, není-li. EXP soubor je použit v sestavení.
Tady je příklad vývozu oddílu:
EXPORTS
DllCanUnloadNow @1 PRIVATE
DllWindowName = WindowName DATA
DllGetClassObject @4 NONAME PRIVATE
DllRegisterServer @7
DllUnregisterServer
Při exportu proměnnou z knihovny DLL pomocí. Soubor DEF nemáte k určení __declspec(dllexport) na proměnnou.Nicméně, v jakékoli souboru, který používá knihovnu DLL, je nutné stále použít __declspec(dllimport) v prohlášení o data.