MFC规则DLL
来源:互联网 发布:方知故国有明 编辑:程序博客网 时间:2024/06/05 02:50
一.MFC规则DLL
MFC规则DLL可以在该dll内部使用MFC,但是与应用程序的接口不能是MFC的。能够被所有支持dll的编程语言所写的应用程序使用,当然也包括使用MFC创建的应用程序。在这种动态链接库中包含一个从CWinApp中继承而来的类,DllMain函数也被隐藏在其中了。
规则DLL包含俩类——静态链接到MFC上和动态连接到MFC上。静态链接到MFC上的规则DLL与MFC静态链接,将MFC的dll代码直接生成在该.dll中,在调用该dll时,使用的是该dll的资源句柄 ;动态链接到MFC上的规则DLL可以和使用它的应用程序同时动态链接到MFC的dll和MFC的扩展dll上,此时,MFC使用主应用程序的资源句柄加载资源模板,这样,如果主应用程序和dll中有相同的资源ID时,就出现了问题,此时需要进行模块转换,才能正确的家在资源。
这里通过1.使用AFX_MANAGE_STATE(AfxGetStaticModuleState())作为接口的第一条语句进行模块状态转换;AFX_MOUDLE_STATE * AFXAPI AfxGetStaticModuleState(),该函数返回当前模块状态,AFX_MANAGE_STATE(AFX_MOUDLE_STATE * pMoudleState),该宏用于将pMoudleState设置为当前模块状态,当宏的作用域结束后,也就是离开pMoudleState所指向栈上对象的作用域时,AFX_MOUDLE_STATE的析构函数完成模块状态的恢复;
2.AfxGetResourceHandle()//获取程序当前正在使用的模块句柄,AfxSetResourceHandle()//设置程序需要使用的模块句柄,在接口函数开始时进行模块状态转换,HINSTANCE old_hInstance=AfxGetResourceHandle(); AfxSetResourceHandle(当前dll的句柄,可以使用theApp.m_hInstance);后面是函数的其余部分,结尾处AfxSetResourceHandle(old_hInstance);将模块状态再次转换过来;该方法可以用在dll中,也可以用在应用程序调用该dll函数之前之后;
二.MFC的扩展DLL
MFC的扩展DLL的内涵是MFC的扩展,用户使用MFC的扩展DLL就像使用MFC本身的DLL一样,除了可以在MFC的扩展DLL内部使用MFC外,MFC的扩展DLL与应用程序的接口也可以是MFC,一般使用MFC的扩展DLL来增强MFC的功能,使用vc++向导生成的MFC的扩展DLL会自动生成DllMain()函数。由MFC扩展的DLL导出的函数,变量和其他很相似,对于导出类,应该在声明类的前面加上AFX_EXT_CLASS。
在 DLL 的头文件中,将 AFX_EXT_CLASS 关键字添加到类的声明中,如下所示:
class AFX_EXT_CLASS CMyClass : public Cdocument {// <body of class>};
当定义了预处理 _AFXDLL 和 _AFXEXT 时,该宏被 MFC 定义为__declspec(dllexport)。 但当定义了 _AFXDLL 而未定义 _AFXEXT 时,该宏被定义为 __declspec(dllimport)。定义后,预处理器符号 _AFXDLL 指示共享 MFC 版本正在由目标可执行文件(DLL 或应用程序)使用。当_AFXDLL 和 _AFXEXT 都定义了时,这指示目标可执行文件是扩展 DLL。
阅读全文
0 0
- MFC规则DLL
- MFC规则DLL 概述
- MFC 规则DLL实例
- 关于MFC规则DLL...
- MFC规则DLL
- MFC DLL的规则
- MFC规则DLL
- MFC规则DLL
- 五. MFC规则DLL(Regular)
- [MFC]MFC下的DLL编程——规则DLL
- 静态.共享的规则MFC DLL/MFC扩展DLL详解
- 静态.共享的规则MFC DLL/MFC扩展DLL详解
- 静态、共享的规则MFC DLL,MFC扩展DLL详解
- Regular DLL(MFC规则DLL)、MFC...Extension DLL(MFC扩展DLL 区别
- VC中创建MFC规则DLL工程
- 非MFC规则DLL用法总结
- VC6创建MFC规则DLL标准过程
- 静态,共享的规则MFC DLL详解
- 【转载】基于Spring Boot 实现定时任务
- 树莓派使用心得
- SharedPreferences数据库
- syntax error on PKG_CHECK_MODULES
- python
- MFC规则DLL
- 【转载】基于Spring Boot + Quartz 的分布式任务调度系统
- myBatis初步认识(一)
- SNA(社会网络分析)——三种中心度总结
- Python基础大纲
- 系统间通讯方式之(Java NIO多路复用模式)(四)
- 而立之年,未立之年
- 数据结构实验之二叉树四:(先序中序)还原二叉树
- zookeeper学习总结