先看一段宏
#ifdef HSCRIPTDEBUG_EXPORTS
#define HSCRIPTDEBUG_API __declspec(dllexport)
#else
#define HSCRIPTDEBUG_API __declspec(dllimport)
#endif
class HSCRIPTDEBUG_API ScriptDebug

{
public:

};

__declspec(dllexport)用于導出符號,也就是定義該函數的dll;
__declspec(dllimport)用于導入,也就是使用該函數。
因為這個頭文件既要被定義該函數的dll包含,也要被使用該函數的程序包含,當被前者包含時我們希望使用__declspec(dllexport)定義函數,當被后者包含時我們希望使用dllimport。于是我們使用
#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif
這種技巧,在定義該函數的dll中,其編譯選項定義了_EXPORTING而使用該函數的程序則沒有定義。
__declspec(dllimpot)如果要是類中有靜態變量的話,是必須有這個的。