Exportieren aus einer DLL mithilfe von "__declspec(dllexport)"

Mit dem Schlüsselwort __declspec(dllexport) können Sie Daten, Funktionen, Klassen oder Klassenmemberfunktionen aus einer DLL exportieren. Mit __declspec(dllexport) wird die Exportanweisung zur Objektdatei hinzugefügt. Sie müssen also keine DEF-Datei verwenden.

Am deutlichsten zeigt sich diese einfache Handhabung beim Exportieren von ergänzten C++-Funktionsnamen. Da es keine Standardspezifikation für die Namensergänzung gibt, kann der Name einer exportierten Funktion zwischen den einzelnen Compilerversionen variieren. Wenn Sie __declspec(dllexport) verwenden, müssen die DLL und die abhängigen EXE-Dateien nur neu kompiliert werden, wenn es Änderungen an den Namenskonventionen gibt.

Viele Exportdirektiven, z. B. Ordinalzahlen, NONAME und PRIVATE, können nur in einer DEF-Datei angegeben werden, und es gibt keine Möglichkeit, diese Attribute ohne DEF-Datei festzulegen. Allerdings kommt es bei Verwendung von __declspec(dllexport) zusätzlich zu einer DEF-Datei nicht zu Buildfehlern.

Das Schlüsselwort __declspec(dllexport) muss links neben dem Schlüsselwort für die Aufrufkonvention angezeigt werden, wenn ein Schlüsselwort angegeben ist, damit Funktionen exportiert werden können. Beispiel:

__declspec(dllexport) void __cdecl Function1(void);

Um alle öffentlichen Datenmember und Memberfunktionen einer Klasse zu exportieren, muss das Schlüsselwort, wie im nachfolgenden Beispiel dargestellt, links vom Klassennamen erscheinen:

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

Hinweis

__declspec(dllexport) kann nicht mit der __clrcall-Aufrufkonvention für eine Funktion übernommen werden.

Beim Erstellen der DLL erstellen Sie in der Regel eine Headerdatei mit den Funktionsprototypen und/oder den zu exportierenden Klassen und fügen den Deklarationen in der Headerdatei anschließend __declspec(dllexport) hinzu. Damit Ihr Code lesbarer wird, definieren Sie ein Makro für __declspec(dllexport). Verwenden Sie dieses Makro mit jedem Symbol, das Sie exportieren:

#define DllExport   __declspec( dllexport )

__declspec(dllexport) speichert Funktionsnamen in der Exporttabelle der DLL. Informationen zum Optimieren der Tabellengröße finden Sie unter Exportieren von Funktionen aus einer DLL über die Ordnungszahl statt über den Namen.

Wie möchten Sie vorgehen?

Worüber möchten Sie mehr erfahren?

Siehe auch

Exportieren aus einer DLL