MFC DLL和Win32 DLL有什么区别?

MFC Dll封装了MFC的库类。是MFC运行时的必需吧。
win32是SDK。你说他们的区别嘛,其实就是MFC和SDK的区别


通常作MFC程序时,选用MFC DLL
MFC规则DLL,没有显性DLLMAIN


MFC DLL自己也分为两种,一种是常规DLL,一种是扩展DLL。
MFC常规DLL在DLL内部能够用MFC类的, 可是给外部的接口并不提供MFC类的支持,仍是提供Win32 DLL一样的接口,与Win32的差异在于,它的内部能够用MFC类
扩展DLL能够有C++的接口,它能够导出C++类给客户端。
导出的函数可使用C++/MFC数据类型作参数或返回值,导出一个类时客户端能建立类对象或者派生这个类。
同时,在DLL中也可使用MFC。


MFC DLL 和win32 DLL的差异就是一个使用MFC类库,一个不使用
若是你代码中用到的MFC,那么必定要建立MFC DLL,由于win32 DLL用不了MFC类


MFC扩展DLL是一般实现从现有Microsoft基础类库类派生的可重用类的DLL。
    MFC扩展DLL具备下列功能和要求:
    1 客户端可执行文件必须是用定义的_AFXDLL编译的MFC应用程序。
    2 扩展DLL也可由动态连接到MFC的规则DLL使用。
    3 扩展DLL应该用定义的_AFXEXT编译。这将强制同时定义_AFXDLL,并确保从MFC头文件中拉入正确的声明。它也确保了在生成DLL时将AFX_EXT_CLASS定义为__declspec(dllexport),这在使用此宏声明扩展DLL中的类时是必要的。
    4 扩展DLL不该实例化从CWinApp派生的类,而应依赖客户端应用程序(或DLL)提供此对象。
    5 但扩展DLL应提供DllMain函数,并在那里执行任何须需的初始化。
    扩展DLL是使用MFC动态连接库版本(也称做共享MFC版本)生成的。只有用共享MFC版本生成的MFC可执行文件
    (应用程序或规则DLL)才能使用扩展DLL。客户端应用程序和扩展DLL必须使用相同版本的MFCx0.dll。使用扩展DLL,能够从MFC派生新的自定义类,而后将此“扩展”版本的MFC提供给调用DLL的应用程序。



主要是资源的管理吧
mfc扩展dll会把当前dll的句柄加入一个全局资源句柄列表。而普通的dll则不会。即便支持mfc也不会。这样你每次用mfc类建立资源的时候要多写几行代码 。但你用在mfc扩展dll用win32来访问资源也须要多写代码。


MFC和SDK的区别

MFC DLL 使用了MFC  体积比较大,(好像只供MFC程序调用)

WIN32 DLL 是纯C++ API 写的,体积也比较小,能够供更多程序调用windows


Dll建立及使用详解

/* 服务器

扩展DLL 能够导出类函数

扩展DLL服务器方的类定义:url

 

  class AFX_CLASS_EXPORT 到出类名: public 基类名  spa

  { .net

    ............ 对象

   } blog

 

   

扩展DLL客户方的类声明头文件:接口

    #pragma  comment(lib,"lib资源

文件名

") 

 

 class AFX_CLASS_IMPORT 到出类名: public 基类名

  { 

    ............ 

  } 

*/ 

 

/* 

正规DLL 能够导出标准C语言函数

正规DLL服务器方的函数定义:

  //

头文件中函数声明

  extern "C" __declspec(dllexport)  

返回值   函数名

(

形式参数声明

 

 //源文件中函数实现

      extern "C" __declspec(dllexport)  

返回值 函数名

(

形式参数声明

)  

     

AFX_MANAGE_STATE ( AfxGetStaticModuleState() );//

第一条语句

            .............. 


} 

  //

在def模块文件中声明函数序号

    EXPORTS   导出函数名  @序号数字  

正规DLL客户方的隐式函数声明头文件: