基于MFC 的链接库
1. 动态库
MFC Regular dll:
① DLL内部有一个CWinApp类全局对象(像是基于mfc的exe程序那样存在一个theApp),该CWinApp类的Initstance负责执行dll内部初始化。
② DLL不能人为提供Dllmain函数,该函数由mfc库提供。
③在visual studio 的工程配置中,regular dll的预处理器中要添加_USRDLL,表示该库是一个规则dll。
④导出接口中必须标准C接口,不能有MFC相关的数据类型。且每个函数开头必须添加AFX_MANAGE_STATE(AfxGetStaticModuleState())语句,进行资源模块切换。
可以用.def文件定义导出符号,也可以用__declspec(dllexport)导出符号。
MFC Extension dll:
① DLL内部没有CWinApp类的全局对象,需要DLL导出自己的Dllmain接口,并在Dllmain中进行一些初始化配置工作。
②在visual studio 的工程配置中,Extension dll的预处理器中要添加_AFXEXT,表示该库是一个扩展dll。
③必须使用MFC提供的AFX_EXT_xxx宏去导出接口和类。
④扩展dll的客户端,必须是一个MFC程序。
2. 静态MFC链接库
只能是regular dll才允许被静态链接,特性和动态regular dll基本一致,但不需要在每个导出接口开头进行资源模块的切换。