Definitionen und Deklarationen (C++)
Microsoft-spezifisch
Die DLL-Schnittstelle bezieht sich auf alle Elemente (Funktionen und Daten), von denen bekannt ist, dass sie von einem Programm im System exportiert werden, also alle als dllimport
oder dllexport
deklarierten Elemente. Bei allen Deklarationen, auf die sich die DLL-Schnittstelle bezieht, muss entweder das dllimport
- oder das dllexport
-Attribut angegeben sein. Die Definition darf jedoch nur das dllexport
Attribut angeben. Beispielsweise verursacht die folgende Funktionsdefinition einen Compilerfehler:
__declspec( dllimport ) int func() { // Error; dllimport
// prohibited on definition.
return 1;
}
Dieser Code generiert außerdem einen Fehler:
__declspec( dllimport ) int i = 10; // Error; this is a definition.
Dies ist jedoch die richtige Syntax:
__declspec( dllexport ) int i = 10; // Okay--export definition
Die Verwendung von dllexport
setzt eine Definition voraus, die von dllimport
eine Deklaration. Sie müssen das extern
-Schlüsselwort mit dllexport
verwenden, um eine Deklaration zu erzwingen; andernfalls wird eine Definition impliziert. Daher sind die folgenden Beispiele richtig:
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
extern DllExport int k; // These are both correct and imply a
DllImport int j; // declaration.
Das vorherige Beispiel wird anhand der folgenden Beispiele verdeutlicht:
static __declspec( dllimport ) int l; // Error; not declared extern.
void func() {
static __declspec( dllimport ) int s; // Error; not declared
// extern.
__declspec( dllimport ) int m; // Okay; this is a
// declaration.
__declspec( dllexport ) int n; // Error; implies external
// definition in local scope.
extern __declspec( dllimport ) int i; // Okay; this is a
// declaration.
extern __declspec( dllexport ) int k; // Okay; extern implies
// declaration.
__declspec( dllexport ) int x = 5; // Error; implies external
// definition in local scope.
}
Ende Microsoft-spezifisch
Siehe auch
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