Sdílet prostřednictvím


Exportování z knihovny DLL pomocí __declspec(dllexport)

Společnost Microsoft zavedla __export v 16bitové verzi kompilátoru jazyka Visual C++, pro povolení kompilátoru generovat automaticky exportní názvy a umístit je do souboru .lib. Tento .lib soubor pak může být použit jako statický .lib soubor pro připojení s DLL knihovnou.

V novější verzi kompilátoru můžete exportovat data, funkce, třídy nebo členské funkce třídy z knihovny DLL použitím klíčového slova __declspec(dllexport). __declspec(dllexport) přidá exportní směrnice do souboru objeků, takže nepotřebujete použít soubor .def.

Tato výhoda jde nejvíce poznat při pokusu exportovat dekorované názvy funkcí jazyka C++. Protože neexistuje žádná standardní specifikace pro název dekorace, může být název exportované funkce změněn mezi verzemi kompilátoru. Používáte-li __declspec(dllexport), je nutností znovu zkompilovat DLL knihovnu a závislé .exe soubory pouze v případě jakékoliv změny zásady vytváření názvů.

Mnoho exportních směrnic, jako například řadové číslovky, NONAME a PRIVATE, může být provedeno pouze v .def souborech a neexistuje zádný jiný způsob ke specifikaci těchto atributů bez použití .def souboru. Avšak použití __declspec(dllexport) společně s .def souborem nezpůsobí chyby sestavení.

Chcete-li exportovat funkce, musí být klíčové slovo __declspec(dllexport) nalevo od klíčového slova konvence volání, pokud je klíčové slovo specifikováno. Příklad:

__declspec(dllexport) void __cdecl Function1(void);

Chcete-li exportovat všechny veřejné datové členy a členské funkce v třídě, musí být klíčové slovo uvedeno nalevo od názvu třídy, tak jak to to uvedeno následovně:

class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };

Poznámka

__declspec(dllexport) nelze použít na funkci s konvencí volání __clrcall.

Při sestavování Vaší DLL knihovny obvykle vytvoříte soubor hlaviček, který obsahuje prototypy funkcí nebo třídy, které jste exportovali a přidali __declspec(dllexport) pro deklaraci v souboru hlaviček. Aby byl Váš kód čitelnější, definujte makro pro __declspec(dllexport) a použíjte makro s každým symbolem, který exportujete:

#define DllExport   __declspec( dllexport ) 

__declspec(dllexport) uloží názvy funkcí v exportní tabulce knihovny DLL. Pokud chcete optimalizovat velikost tabulky, podívejte se na téma Export funkcí z DLL knihovny podle řádu, než podle názvu.

Poznámka

Pokud přenášíte zdrojový kód knihovny DLL z Win16 na Win32, nahraďte každou instanci __export příkazem __declspec(dllexport).

Referenci naleznete ve Win32 souboru hlaviček Winbase.h. Obsahuje příklady použití __declspec(DllImport).

Co chcete udělat?

Co chcete vědět více?

Viz také

Koncepty

Export z knihovny DLL