Sdílet prostřednictvím


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:

  1. __Declspec(dllexport) klíčové slovo ve zdrojovém kódu

  2. EXPORTS v prohlášení. DEF souborů

  3. /EXPORT specifikace v příkazu odkaz

  4. 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.

Viz také

Referenční dokumentace

Pravidla pro příkazy definice modulu