Export z knihovny DLL pomocí deklarace __declspec(dllexport)

Pomocí klíčového __declspec(dllexport) slova můžete exportovat data, funkce, třídy nebo členské funkce třídy z knihovny DLL. __declspec(dllexport) přidá direktivu exportu do souboru objektu, takže nemusíte používat soubor .def.

Toto pohodlí je nejvýraznější při pokusu o export zdobených názvů funkcí jazyka C++. Vzhledem k tomu, že neexistuje žádná standardní specifikace pro dekoraci názvů, může se název exportované funkce mezi verzemi kompilátoru změnit. Pokud použijete __declspec(dllexport), překompilování knihovny DLL a závislých .exe souborů je nezbytné pouze pro všechny změny zásad vytváření názvů.

Mnoho direktiv exportu, jako jsou ordinaly, NONAME a PRIVATE, lze vytvořit pouze v souboru .def a neexistuje způsob, jak tyto atributy zadat bez souboru .def. Použití __declspec(dllexport) kromě použití souboru .def však nezpůsobuje chyby sestavení.

Pokud chcete exportovat funkce, __declspec(dllexport) musí se klíčové slovo objevit nalevo od klíčového slova konvence volání, pokud je zadáno klíčové slovo. Příklad:

__declspec(dllexport) void __cdecl Function1(void);

Pokud chcete exportovat všechny veřejné datové členy a členské funkce ve třídě, musí se klíčové slovo zobrazit nalevo od názvu třídy následujícím způsobem:

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

Poznámka:

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

Při sestavování knihovny DLL obvykle vytvoříte soubor hlaviček, který obsahuje prototypy funkcí a/nebo třídy, které exportujete a přidáváte __declspec(dllexport) do deklarací v souboru hlaviček. Pokud chcete, aby byl kód čitelnější, definujte makro a použijte ho se __declspec(dllexport) jednotlivými symboly, které exportujete:

#define DllExport   __declspec( dllexport )

__declspec(dllexport) ukládá názvy funkcí v tabulce exportu knihovny DLL. Pokud chcete optimalizovat velikost tabulky, přečtěte si téma Export funkcí z knihovny DLL podle řadových, nikoli podle názvu.

Co chcete udělat?

O čem chcete vědět víc?

Viz také

Export z knihovny DLL