Regular DLL 可以被任何WIN32环境装载,它导出C风格的函数,但是不能导出C++类、成员函数或重载函数。
静态连接的Regular DLL,包括所有它需要的MFC库代码的拷贝,可以独立于MFC库。
动态连接的Regular DLL相对很小,但是要保证相应的MFC DLL在目标机器上存在。Extension DLL  支持C++接口,可以导出整个类,它要求客户程序被动态地连接到MFC库,并且客户程序和Extension DLL要一致连接到MFC DLL的相同版本(mfc42.dll,mfcd42.dll).

解决方案 »

  1.   

    如果要进行跨平台开发,只能选择Regular DLL with MFC statically linked
    如果只是提供给VC的程序用,而且一般情况下要求使用比较简单,可以采用第三种方式,这种情况下有可能会发生MFC版本不一致的情况 
      

  2.   

    选择使用哪种DLL如果你的DLL不使用MFC,那么使用Non-MFC Win32 DLL,不必要的连接MFC会导致磁盘空间和内存的浪费如果你的DLL需要使用MFC,并且DLL将来会被MFC或者非MFC程序调用,那么使用Regular DLL。动态链接的Regular DLL文件小,占用内存少,但是需要和MFCx0.DLL,MSVCRTx0.DLL一起发布;静态链接的Regular DLL文件大,而且可能占用额外的内存,因为他需要装入自己的MFC程序代码拷贝,还有一点需要考虑的就是静态链接的Regular DLL编译时间要长许多。
    Regular DLL使用"C"接口,可以使用MFC的类如果你的DLL需要使用MFC,并且只会被MFC程序调用,你可以选择Regular DLL或者Extension DLL。如果你的DLL实现可重用的MFC派生类,或者你需要在MFC程序和DLL之间传递MFC派生对象,你必须使用Extension DLL。
    Extension使用C++/MFC类接口,