Dela via


Exportera från en DLL med hjälp av __declspec(dllexport)

Du kan exportera data, funktioner, klasser eller klassmedlemsfunktioner från en DLL med hjälp av nyckelordet __declspec(dllexport) . __declspec(dllexport) lägger till exportdirektivet i objektfilen så att du inte behöver använda en .def-fil.

Den här bekvämligheten är tydligast när du försöker exportera dekorerade C++-funktionsnamn. Eftersom det inte finns någon standardspecifikation för namndekoration kan namnet på en exporterad funktion ändras mellan kompilatorversionerna. Om du använder __declspec(dllexport)behöver du bara kompilera om DLL och beroende .exe filer för att ta hänsyn till eventuella ändringar i namngivningskonventionen.

Många exportdirektiv, till exempel ordningstal, NONAME och PRIVATE, kan endast göras i en .def-fil, och det finns inget sätt att ange dessa attribut utan en .def-fil. Men att använda __declspec(dllexport) förutom att använda en .def-fil orsakar inte byggfel.

Om du vill exportera funktioner måste nyckelordet __declspec(dllexport) visas till vänster om nyckelordet calling-convention om ett nyckelord har angetts. Till exempel:

__declspec(dllexport) void __cdecl Function1(void);

Om du vill exportera alla offentliga datamedlemmar och medlemsfunktioner i en klass måste nyckelordet visas till vänster om klassnamnet på följande sätt:

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

Anmärkning

__declspec(dllexport) kan inte tillämpas på en funktion med anropskonventionen __clrcall .

När du skapar din DLL skapar du vanligtvis en rubrikfil som innehåller de funktionsprototyper och/eller klasser som du exporterar och lägger till __declspec(dllexport) i deklarationerna i rubrikfilen. Om du vill göra koden mer läsbar definierar du ett makro för __declspec(dllexport) och använder makrot med varje symbol som du exporterar:

#define DllExport   __declspec( dllexport )

__declspec(dllexport) lagrar funktionsnamn i DLL:ets exporttabell. Om du vill optimera tabellens storlek kan du läsa Exportera funktioner från en DLL med ordningstal i stället för efter namn.

Vad vill du göra?

Vad vill du veta mer om?

Se även

Exportera från en DLL