Así que el común (al menos VS 2005 estados) forma de definir las exportaciones/importaciones para un archivo DLL es:Header File mismo para ambos DLL y biblioteca estática
#ifdef MY_EXPORTS
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif
class MY_API MyClass {
...
};
Esto funciona muy bien si sólo estoy construyendo mi código como una DLL. Sin embargo, quiero tener la opción de usar una biblioteca estática O una DLL. Ahora, una solución obvia (pero terrible) es copiar todo el código, eliminando el DLL que define 'MY_API'. Ahora, lo que parecería un enfoque mucho mejor es un cambio de línea de comando para definir o no definir el material de la DLL. Sin embargo, en el caso de una biblioteca estática, ¿qué debería ser 'MY_API'?
#ifdef DLL_CONFIG
#ifdef MY_EXPORTS
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif
#else
#define MY_API // What goes here?
#endif
class MY_API MyClass {
...
};
Ahora suponiendo que esto se puede hacer habrá problemas cuando un usuario de la biblioteca incluye los archivos de cabecera (es decir. Se tienen que definir 'DLL_CONFIG')?