所以常見的(至少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」)?