Definiciones y declaraciones
Collapse the table of content
Expand the table of content
Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés

Definiciones y declaraciones (C++)

 

La interfaz DLL hace referencia a todos los elementos (funciones y datos) que se sabe que se van a exportar mediante algún programa del sistema, es decir, todos los elementos declarados como dllimport o dllexport.Todas las declaraciones incluidas en la interfaz DLL deben especificar el atributo dllimport o dllexport.Sin embargo, la definición debe especificar el atributo 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, esta 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 extern con dllexport para forzar una declaración; en caso contrario, se asume una definición.Por tanto, los siguientes ejemplos 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 los anteriores:

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:
© 2016 Microsoft