Compartir a través de


Definiciones y declaraciones (C++)

Específicos de Microsoft

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

Vea también

Referencia

dllexport, dllimport