dllexport, dllimport

Microsoft-spezifisch

Die Speicherklassenattribute dllexport und dllimport sind Microsoft-spezifische Erweiterungen der Programmiersprachen C und C++. Sie können sie verwenden, um Funktionen, Daten und Objekte in eine DLL zu exportieren oder von einer DLL zu importieren.

Syntax

__declspec( dllimport ) declarator
__declspec( dllexport ) declarator

Hinweise

Diese Attribute definieren explizit die Schnittstelle der DLL zu dem Client, der die ausführbare Datei oder eine andere DLL sein kann. Durch das Deklarieren von Funktionen als dllexport wird die Notwendigkeit einer Moduldefinitionsdatei (.def) zumindest in Bezug auf die Spezifikation exportierter Funktionen beseitigt. Das dllexport-Attribut ersetzt das __export-Schlüsselwort.

Wenn eine Klasse als __declspec(dllexport) gekennzeichnet ist, werden alle Spezialisierungen von Klassenvorlagen in der Klassenhierarchie implizit als __declspec(dllexport) gekennzeichnet. Das bedeutet, dass Klassenvorlagen explizit instanziiert werden und die Member der Klasse definiert werden müssen.

dllexport einer Funktion macht die Funktion mit ihrem ergänzten Namen verfügbar, was auch als „Name mangling“ bekannt ist. Für C++-Funktionen enthält der ergänzte Name zusätzliche Zeichen, die Typ- und Parameterinformationen codieren. C-Funktionen oder Funktionen, die als extern "C" deklariert werden, folgen C-Namen-Ergänzungsregeln. Weitere Informationen zur Namensgestaltung im C/C++-Code finden Sie unter Ergänzte Namen.

Um einen nicht ergänzten Namen zu exportieren, können Sie bei der Verknüpfung eine Moduldefinitionsdatei (.def) verwenden, die den nicht ergänzten Namen in einem EXPORTS-Abschnitt definiert. Weitere Informationen finden Sie unter EXPORTS. Eine andere Möglichkeit zum Exportieren eines nicht ergänzten Namens ist die Verwendung einer #pragma comment(linker, "/export:alias=decorated_name")-Anweisung im Quellcode.

Wenn Sie dllexport oder dllimport deklarieren, müssen Sie die erweiterte Attributsyntax und das Schlüsselwort __declspec verwenden.

Beispiel

// Example of the dllimport and dllexport class attributes
__declspec( dllimport ) int i;
__declspec( dllexport ) void func();

Um den Code lesbarer zu machen, können Sie alternativ Makrodefinitionen verwenden:

#define DllImport   __declspec( dllimport )
#define DllExport   __declspec( dllexport )

DllExport void func();
DllExport int i = 10;
DllImport int j;
DllExport int n;

Weitere Informationen finden Sie unter:

Ende Microsoft-spezifisch

Weitere Informationen

__declspec
Schlüsselwörter