Export z knihovny DLL pomocí deklarace __declspec(dllexport)
Společnost Microsoft zavedla __export v 16bitové verzi kompilátoru jazyka Visual C++ za účelem 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ších verzích 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ěrnici do souboru objektů, takže nepotřebujete použít soubor .def.
Tato výhoda je nejviditelnější při pokusu o export dekorovaných názvů 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 nutné 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 žádný jiný způsob specifikace těchto atributů bez použití .def souboru.Avšak použití __declspec(dllexport) společně se souborem .def 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, jako v následujícím příkladu:
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í DLL knihovny obvykle vytvoříte soubor hlaviček, který obsahuje prototypy funkcí a/nebo třídy, které jste exportovali, a přidáte __declspec(dllexport) do deklarací v souboru hlaviček.Aby byl kód čitelnější, definujte makro pro __declspec(dllexport) a použijte 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 namísto 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 v souboru hlaviček Win32 Winbase.h.Obsahuje příklady použití __declspec(DllImport).
Co chcete udělat?
Export funkcí jazyka C++ pro použití ve spustitelných souborech jazyka C
Export funkcí jazyka C pro použití ve spustitelných souborech jazyka C nebo C++