Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés
Esta documentación está archivada y no tiene mantenimiento.

Definiciones y declaraciones (C++)

Interfaz DLL hace referencia a todos los elementos (funciones y datos) que se conocen para exportarse algún de programa en el sistema; es decir, todos los elementos declarados como dllimport o dllexport. Todas las declaraciones incluidas en la interfaz DLL deben especificar dllimport o el atributo de dllexport . Sin embargo, la definición debe especificar el atributo de dllexport . Por ejemplo, la definición de función siguiente genera un error del compilador:

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

este código también genera un error:

#define DllImport   __declspec( dllimport )

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

Sin embargo, ésta es la sintaxis correcta:

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

el uso de dllexport implica una definición, mientras que dllimport implica una declaración. Debe utilizar la palabra clave de extern con dllexport para forzar una declaración; si no, una definición es implícito. así, los ejemplos siguientes son correctos:

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

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

Los ejemplos siguientes aclaran anterior:

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