- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第09章动态链接库和ActiveX开发,VC2010应用开发技术_原书配套PPT讲解
动态链接库和ActiveX开发 本章主要内容 9.1 编写自己的DLL 9.1.1 DLL概述 9.1.2 MFC中DLL的分类 9.1.3 DLL中的导入导出函数 9.1.4 DLL中的数据与资源 9.1.5 DLL与应用程序的链接 9.1.6 DLL开发举例 9.1.1 DLL概述 比较大的应用程序都是由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作完成整个软件系统的工作,其中可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序文件中,会带来一些不足:一是增加了应用程序的大小,占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;二是在编写大的应用程序时,每次修改重建都必须编译所有的源代码,增加了编译过程的复杂性,也不利于阶段性的单元测试。 Windows平台提供了一种较为有效的编程和运行环境,开发者可以将独立的程序模块创建为DLL(Dynamic Linkable Library)文件,并可对它们进行单独编译和测试。运行时,只有当EXE程序调用这些DLL模块时,系统才会将它们装载到内存空间,这种方式不仅减少了EXE文件的大小和对内存空间的占用,而且使这些DLL模块同时被多个应用程序使用,Windows自身就将一些主要功能以DLL模块形式实现。 9.1.1 DLL概述 一般来说,DLL是一种二进制文件(通常带有DLL扩展名),它由全局数据、服务函数和资源组成。在运行时被系统加载到进程的虚拟地址空间中,成为调用进程的一部分。如果与其它DLL没有冲突,该文件通常映射到进程虚拟地址空间的同一地址上。DLL模块中包含各种导出函数,用于向外界提供服务,Windows在加载DLL模块时,将进程中的函数调用与DLL文件的导出函数进行匹配。 在Windows环境中,每个进程都复制了自己的读/写全局变量,如果想和其它进程共享内存,必须使用内存映射文件或者声明一个共享数据段,DLL模块需要的内存都是从运行进程的堆栈中分配的。 DLL编程越来越容易了,Windows大大简化了其编程模式,而且有各种向导和MFC类库支持,下面主要讨论如何在VS2010环境中使用MFC编写DLL。 9.1.2 MFC中DLL的分类 带静态链接MFC的规则DLL 使用共享MFC DLL的规则DLL MFC扩展DLL VS2010 MFC DLL向导对话框 1、带静态链接MFC的规则DLL使用 该类DLL采用静态方式连接到MFC的动态连接库,它的特点是在源文件里有一个继承自CWinApp的类。这种DLL应用程序的导出函数可以被任何Windows应用程序调用,因为该动态库包含了它所使用的所有MFC函数。其导出函数具有如下形式: extern “C” EXPORT YourExportedFunction( ); 如果没有extern “C”修饰,导出函数仅能被C++代码调用,DLL应用程序从CWinApp派生,但没有消息循环。它自动生成def文件,在派生类的InitInstance和ExitInstance成员函数中完成初始化和结束工作。 2. 使用共享MFC DLL的规则DLL 它和静态链接的DLL一样,也是内部使用MFC的DLL,导出函数是标准的C语言接口,可以被MFC和非MFC应用程序使用,具有def文件,在CWinApp派生类的InitInstance和ExitInstance成员函数中进行初始化和结束工作。 这种DLL建立时使用的是MFC的动态共享库,但它的导出函数可以被任何Windows应用程序所调用,包括使用MFC的应用程序。 所有从DLL导出的函数应该加上如下语句: AFX_MANAGE_STATE(AfxGetStaticModuleState( )) 该宏用于正确切换MFC模块状态,AfxGetStaticModuleState函数用于获取模块状态,这个宏必须出现在任何调用MFC语句之前,包括声明对象、变量之前,因为它们的构造函数可能会调用MFC DLL,该宏在调用MFC DLL导出函数时保证模块状态的正确以及能访问到有效资源(如DLL中的对话框等),而且MFC模块结束时,自动恢复到以前的模块状态。 提示:AFX_MANAGE_STATE宏不能用在静态链接的MFC DLL和MFC扩展DLL中。 如果要在动态链接MFC DLL中使用MFC OLE功能,则必须在DLL的InitInstance中调用AfxOleInitModule。同样,如果使用MFC数据库或DAO支持,必须调用AfxDbInitModule,使用MFC Socket
您可能关注的文档
最近下载
- 2025社区工作者招聘考试综合基础知识试题(附答案).docx VIP
- 《危险化学品企业安全生产标准化通用规范》专业深度解读与应用培训指导材料之4:5管理要求-5.3 安全生产信息与合规审核(雷泽佳编制-2025A0).pdf VIP
- 电机驱动用户手册.pdf
- 美的集团财务报告分析研究.docx VIP
- 2022-2023学年广东省深圳中学高一(上)期中语文试卷.doc VIP
- 中钢集团苍山铁矿主井提升系统建安及井下溜破系统安装工程总施工组织设计.pdf VIP
- 税务局第一季度考试.doc VIP
- 你拓我印的游戏美术课件.pptx VIP
- DB11_T 995-2025 城市轨道交通工程设计标准.pdf VIP
- 2025年航天器太阳翼技术发展考核试卷.doc VIP
原创力文档


文档评论(0)