http://blog.youkuaiyun.com/heiyang/article/details/6651142
经常发现有#ifdef _AFXDLL.......#else......这样的语句我也在网上找了找答案,得知:定义这个符号表示动态连接MFC。
在用VC编程时,1新建-》2MFC APPWIZARD-》3....-》4...-》到 STEP 3 OF 4这一步有个选项 1 D当共享DLL
2 S当STATICALLY连接库
我选“1 D当共享DLL”再“确定”,这时,框架生成的原文件中就定义了“_AFXDLL”,然后是一些包含头文件,其中就包含了#def _AFXDLL.......#else......所在的文件,然后是当前的视图,文档,等代码
当编译时因为定义了_AFXDLL,所以就编译#ifdef _AFXDLL中的内容
在制作DLL时也有
1“动态连接库和MFC STATICALLY 连接”
2“动态连接库使用MFC共享”
也就是说如果原文件定义了_AFXDLL,说明原文件中有某些类,函数等,是以MFC DLL的形式提供的(也就是动态连接到MFC),如果原文件中没定义_AFXDLL,则这些类,函数等的实现代码是被直接插入原文件(也就是静态连接到MFC)。
指MFC的动态库是否静态链接,或动态链接(有_AFXDLL),也就是说
你编译的程序中,当运行时,mfc42.dll等是否需要支持,如果静态链接,
这些就不需要了。
说明,对于vs2008 的非sp1版本mfc,代码里没有_AFXDLL. 在vs2008里的工程属性里的 c/c++---命令行里有这个宏。
作者说的代码里里出现,可能是其他版本,或者作者说的错误的,但是作者总结的, dll制作是对的, 无论mfc 规则dll 还是mfc 扩展dll里,都有这个宏。
为了验证是否正确,用vc6试试:发现在 vc6的InitInstance函数里是有的, 可能高版本已经不区分了。