先看一段宏
#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)如果要是类中有静态变量的话,是必须有这个的。