"在共享DLL中使用MFC"指的是打包时一些MFC的DLL的内容没有被硬编码到在EXE文件中,所以EXE会文件较小,但是运行时要求运行的系统环境中要有相关的DLL文件.
"在静态库中使用MFC"是将DLL对应的lib静态库中的相关代码硬编码到EXE文件中,文件较大,但是可以在没有已经被包含DLL的机器上运行,当然即使如此也并非所有的DLL都会将其硬编码到Exe中,因此仍然某些DLL是必须的.比如Redistributable Package中的某些DLL.
静态库中编译出来的可执行文件拿到其它机器上也可以运行,共享DLL中编译出来的可执行文件在本机上可以执行,若拿到其它机器上就需要相应的动态库支持。
另外,共享DLL下的工程大小会稍小一些,但是在另一台机器上运行时务必保证那一台机器上有动态库支持。
a. 在属性-常规-MFC的使用 中,当为“在共享 DLL 中使用 MFC”时,则工程会自动将在属性-C/C++-代码生成中的运行库置为动态编译形式(根据debug模式和release模式而言,为多线程调试DLL和多线程DLL);
b. 在属性-常规-MFC的使用 中,当为“在静态库 中使用 MFC”时,则工程会自动将在属性-C/C++-代码生成中的运行库置为静态编译形式(根据debug模式和release模式而言,为多线程调试MTD和多线程MT)。
c. 在属性-C/C++-预处理器-预处理器定义中,_AFXDLL是在动态编译中进行的,即为“在共享 DLL 中使用 MFC”。因此,如果预处理器定义中有_AFXDLL宏定义,则工程必须在动态编译中进行,即为多线程调试DLL或多线程DLL。