宏名称 宏内容
AFX_CLASS_IMPORT __declspec(dllexport)
AFX_API_IMPORT __declspec(dllexport)
AFX_DATA_IMPORT __declspec(dllexport)
AFX_CLASS_EXPORT __declspec(dllexport)
AFX_API_EXPORT __declspec(dllexport)
AFX_DATA_EXPORT __declspec(dllexport)
AFX_EXT_CLASS #ifdef _AFXEXT AFX_CLASS_EXPORT
#else AFX_CLASS_IMPORT
AFX_EXT_API #ifdef _AFXEXT AFX_API_EXPORT
#else AFX_API_IMPORT
AFX_EXT_DATA #ifdef _AFXEXT AFX_DATA_EXPORT
#else AFX_DATA_IMPORT
特别是后面三个宏,使用最广泛,因为只用在类或函数声明的地方加上AFX_EXT_***即可,具体展开机制如下
如果用于DLL生成程序中,则表示输出(因为_AFX_EXT被定义,通常是在编译器的标识参数中指定该选项/D_AFX_EXT);
如果用于使用DLL的应用程序中,则表示输入(_AFX_EXT没有定义)。
见下图,
在MFC扩展DLL中,自动在项目编译器预处理中加入AFXEXT,而对于其他MFC规则DLL需要自己手动添加预处理。