__declspec(dllimport)
significa que el código actual es usando la DLL que implementa su clase. Por lo tanto, las funciones miembro y los miembros de datos estáticos se definen en la DLL y su definición en el programa es un error.
Si está intentando escribir el código para la DLL que implementa esta clase (y así define las funciones miembro y los miembros de datos estáticos), entonces necesita marcar la clase __declspec(dllexport)
en su lugar.
Es común usar una macro para esto. Cuando construye su DLL, defina una macro BUILDING_MYDLL
o similar. En la cabecera de MyClass
usted entonces tiene:
#ifdef BUILDING_MYDLL
#define MYCLASS_DECLSPEC __declspec(dllexport)
#else
#define MYCLASS_DECLSPEC __declspec(dllimport)
#endif
class MYCLASS_DECLSPEC MyClass
{
...
};
Esto significa que se puede compartir entre la cabecera de la DLL y la aplicación que utiliza el archivo DLL.
Aquí está la cita correspondiente en [la página de Microsoft] (http://msdn.microsoft.com/de-de/library/8fskxacy.aspx): "Usar __declspec (dllimport) es opcional en las declaraciones de funciones [... ]. Sin embargo, debe usar __declspec (dllimport) para que el archivo ejecutable de importación tenga acceso a los símbolos y objetos de datos públicos de la DLL. Tenga en cuenta que los usuarios de su DLL aún necesitan vincularse con una biblioteca de importación. " –