所以常见的(至少VS 2005点的状态)的方式来确定出口/进口的DLL是:同一个头文件为DLL和静态库
#ifdef MY_EXPORTS
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif
class MY_API MyClass {
...
};
这个伟大的工程,如果我只是在我的构建代码作为DLL。但是,我想要使用静态库或DLL的选项。现在一个明显的(但很糟糕的)解决方案是复制所有代码,删除'MY_API'定义的DLL。现在看起来更好的方法是命令行切换来定义或不定义DLL的东西。然而,在静态库的情况下,'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 {
...
};
假设现在可以做到这一点会不会有问题时,库中的用户包括头文件(即他们将不得不定义“DLL_CONFIG”)?