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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für