- 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开发 软件工程教研室 VC++ 2010--软件学院 动态链接库和ActiveX开发 第09章 本章主要内容 9.2 编写自己的ActiveX控件 9.1 编写自己的DLL 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
您可能关注的文档
- S7-200SMART PLC编程及应用土木工程施工技术与组织管理第4章 砌筑工程和脚手架.pptx
- S7-200SMART PLC编程及应用土木工程施工技术与组织管理第5章 混凝土结构工程.ppt
- S7-200SMART PLC编程及应用土木工程施工技术与组织管理第9章 防水工程.ppt
- S7-200SMART PLC编程及应用土木工程施工技术与组织管理第10章 装饰工程.ppt
- S7-200SMART PLC编程及应用土木工程施工技术与组织管理第13章 施工组织设计.ppt
- SAP ERP原理与实训(第3章)Intro_ERP_Using_GBI_Slides_MM_en_v2.1.ppt
- SAP ERP原理与实训(第4章)Intro_ERP_Using_GBI_Slides_PP_en_v2.1.ppt
- SAP ERP原理与实训(第5章-5.1)Intro_ERP_Using_GBI_Slides_FI_en_v2.1.ppt
- SAP ERP原理与实训(第5章-5.2)Intro_ERP_Using_GBI_Slides_CO_en_v2.1.ppt
- SIMATIC S7 系统概述02 硬件安装与维护.ppt
最近下载
- 2024仁爱版七年级英语下册Unit 12 Lesson 1 Better Together每课时教学设计汇编(含8个教学设计).pdf VIP
- 泪液排出系统疾病的护理.pptx VIP
- 健康顾问:养生保健典藏本.pdf VIP
- 部编版历史八年级上册第一、二单元 测试卷(含答案).pdf VIP
- T_SCJA 9-2021_非道路车辆类型.pdf VIP
- iec61850icd模型文件属性详解.pdf VIP
- 05-03-光纤陀螺方案和技术 光纤传感原理课件.pdf VIP
- 2025江苏中职职教高考(烹饪类)讲义知识考点复习资料.pdf VIP
- 初中班会课件《突围—目标成就未来》.pptx VIP
- 百灵达UB2442调音台说明书.pdf VIP
文档评论(0)