Freigeben über


Definitionen und Deklarationen (C++)

Microsoft-spezifisch

Die DLL-Schnittstelle bezieht sich auf alle Elemente an (Funktionen und Daten bekannt ist, dass) durch ein Programm im System exportiert werden. das heißt, alle Elemente, die als dllimport oder dllexportdeklariert werden.Alle Deklarationen, die in der DLL-Schnittstelle eingeschlossen sind, müssen entweder dllimport oder dllexport-Attribut angeben.Die Definition muss jedoch nur das dllexport-Attribut angeben.Beispielsweise generiert die folgenden Funktionsdefinition einen Compilerfehler:

__declspec( dllimport ) int func() {   // Error; dllimport
                                    // prohibited on definition.
   return 1;
}

Dieser Code generiert außerdem einen Fehler:

#define DllImport   __declspec( dllimport )

__declspec( dllimport ) int i = 10;  // Error; this is a
                                     // definition.

Dies ist jedoch richtige Syntax:

__declspec( dllexport ) int i = 10;     // Okay--export definition

Die Verwendung von dllexport bedeutet, eine Definition, während dllimport eine Deklaration impliziert.Sie müssen das externdllexport-Schlüsselwort verwenden, um eine Deklaration zu erzwingen. Andernfalls wird eine Definition impliziert.Daher sind die folgenden Beispiele: korrekt

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

extern DllImport int k; // These are both correct and imply a
DllImport int j;        // declaration.

In den folgenden Beispielen wird das Vorausgehen:

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.
}

Siehe auch

Referenz

dllexport, dllimport