Visual C++实用教程 教学课件 作者 周进 朱训林 张宏林 第11章-动态链接库.ppt

Visual C++实用教程 教学课件 作者 周进 朱训林 张宏林 第11章-动态链接库.ppt

ID:50307520

大小:1.29 MB

页数:102页

时间:2020-03-07

Visual C++实用教程 教学课件 作者 周进 朱训林 张宏林 第11章-动态链接库.ppt_第1页
Visual C++实用教程 教学课件 作者 周进 朱训林 张宏林 第11章-动态链接库.ppt_第2页
Visual C++实用教程 教学课件 作者 周进 朱训林 张宏林 第11章-动态链接库.ppt_第3页
Visual C++实用教程 教学课件 作者 周进 朱训林 张宏林 第11章-动态链接库.ppt_第4页
Visual C++实用教程 教学课件 作者 周进 朱训林 张宏林 第11章-动态链接库.ppt_第5页
资源描述:

《Visual C++实用教程 教学课件 作者 周进 朱训林 张宏林 第11章-动态链接库.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、第11章 动态链接库动态链接库(DynamicLinkLibrar,DLL)是一个可执行模块,其包含的函数可以由Windows应用程序调用以执行一些功能,主要为应用程序模块提供服务。本章将全面、系统地阐述在VisualC++平台下进行Win32动态链接库的设计和应用。主要内容如下。●动态链接库(DLL)的基础知识。●DLL的出入口函数。●调用DLL中的两种方式。●开发DLL的方式。●DLL中资源的利用。动态链接库的基础知识11.1DLL的出入口函数11.2两种链接DLL的方式11.3开发DLL11.4Active

2、X基础11.7界面汉化示例11.6动态链接库中的资源11.5小结11.811.1动态链接库的基础知识比较大的应用程序都是由很多模块组成的,这些模块彼此协作,以完成整个软件系统的工作。其中可能存在一些模块的功能较为通用,在构造其他软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题。一是增加了应用程序的大小,占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另外,在编写大的EXE程序时,每次修改重建时都必须调整编译所有源代码,不但

3、增加了编译过程的复杂性,也不利于阶段性的单元测试。Windows系统平台上提供了一种完全不同的有效编程和运行环境,可以将独立的程序模块创建为较小的动态链接库文件,并可对它们单独进行编译和测试。在运行时,只有在EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了EXE文件的大小和对内存空间的需求,而且这些DLL模块可以同时被多个应用程序使用,从而充分利用资源。MicrosoftWindows将一些主要的系统功能以DLL模块的形式实现。例如,IE中的一些基本功能就是由DLL文

4、件实现的,它可以被其他应用程序调用和集成。一般来说,下面的这几种情况必须用到动态链接库技术。●多个应用程序共享代码和数据就是通过共享动态链接库实现的,比如Office软件的各个组成部分有相似的外观和功能。●在钩子程序过滤系统消息时必须使用动态链接库。●设备驱动程序必须是动态链接库。●如果要在对话框编辑器中使用自己定义的控件,也必须使用动态链接库。●动态链接库以一种自然的方式将一个大的应用程序划分为几个小的模块,有利于小组内部成员的分工与合作。而且,各个模块可以独立升级。如果小组中的一个成员开发了一组实用示例,他就

5、可以把这些示例放在一个动态链接库中,让小组的其他成员使用。●为了实现应用程序的国际化,往往需要使用动态链接库。使用动态链接库可以将针对某一国家、语言的信息存放在其中。对于不同的版本,使用不同的动态链接库。在使用AppWizard生成应用程序时,可以指定资源文件使用的语言,这就是通过提供不同的动态链接库实现的。一般来说,DLL是一种磁盘文件(通常带有DLL扩展名),它由全局数据、服务函数和资源组成,在运行时被系统加载到进程的虚拟空间中,成为调用进程的一部分。如果与其他DLL之间没有冲突,该文件通常映射到进程虚拟空间

6、的同一地址上。DLL模块中包含各种导出函数,用于向外界提供服务。Windows在加载DLL模块时将进程函数调用与DLL文件的导出函数相匹配。在Win32环境中,每个进程都复制了自己的读写全局变量。如果想要与其他进程共享内存,必须使用内存映射文件或者声明一个共享数据段。DLL模块需要的堆栈内存都是从运行进程的堆栈中分配出来的。DLL现在越来越容易编写。Win32已经大大简化了其编程模式,并有许多来自AppWizard和MFC类库的支持。使用VisualC++6.0工具可以编写3种不同类型的动态链接库。●Non-MF

7、CDLL:指不用MFC的类库结构,直接用C语言编写的DLL,其输出的函数一般采用标准C接口,并能被非MFC或MFC编写的应用程序所调用。●RegularDLL:和下述的ExtensionDlls一样,是用MFC类库编写的。其特点是在源文件里有一个继承CWinApp的类。其又可细分成静态连接到MFC和动态连接到MFC上的。但静态连接到MFC的动态链接库只被VisualC++的专业版和企业版所支持。●ExtensionDLL:用来实现从MFC所继承下来的类的重新利用,也就是说,用这种类型的动态链接库,可以用来输出一个

8、从MFC所继承下来的类。ExtensionDLL使用MFC的动态连接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用。11.2DLL的出入口函数DllMain()函数是DLL模块的默认入口点。当Windows加载DLL模块时调用这一函数。系统首先调用全局对象的构造函数,然后调用全局函数DllMain()。DllMain()函数不仅在将DLL链接加载到进程时被调用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。