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?
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++
Import do aplikace s použitím deklarace __declspec(dllimport)