cabecera de exportación DLLUna advertencia con DLL de 64 bits edificio
extern "C"
void _declspec(dllexport) __stdcall foo();
archivo .def
EXPORTS
foo @1
Cuando construyo el DLL de 64 bits por acumulación de configuración, que cumple con esta advertencia.
advertencia LNK4197: exportar 'foo' especificado varias veces; utilizando la primera especificación
Pero si construyo el dll mediante la configuración de compilación de 32 bits, la advertencia nunca ocurre.
¿Cuál es el problema? Cuál es la diferencia.
En encabezado DLL de interfaz, que suelen utilizar esta técnica,
#ifdef EXPORT_DLL
#define BASICAPI _declspec(dllexport)
#else
#define BASICAPI _declspec(dllimport)
#endif //_EXPORT_DLL
Pero si también existe def archivo, siempre habrá satisfacer la advertencia cuando estamos construyendo DLL de 64 bits.
Entonces, ¿deberíamos escribir los códigos de esta manera?
#ifdef EXPORT_DLL
#define BASICAPI
#else
#define BASICAPI _declspec(dllimport)
#endif //_EXPORT_DLL
Funciona bien. Pero no es familiar para mí.
Dame tu opinión.
'64 compilador de bits no decora nombres 'No lo sabía. ¡Esa fue la razón! Gracias. – Benjamin
Por cierto, ¿cómo puedo usar la fuente cursiva en el cuadro de comentarios? – Benjamin
* decora * nombres, simplemente los decora de forma diferente al compilador de 32 bits (es decir, sin el subrayado inicial). Puede exportar una función dos veces con diferentes nombres (eso es lo que espero que esté sucediendo en sus compilaciones de 32 bits). La advertencia es porque en compilaciones de 64 bits, tanto el '__declspec' como el archivo .def darían como resultado el * mismo * nombre exportado, por lo que uno de ellos se considera redundante. –