欢迎来到天天文库
浏览记录
ID:21342563
大小:105.00 KB
页数:7页
时间:2018-10-21
《实验二 动态链接库使用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验二动态链接库的建立与调用实验目的1、理解动态链接库的实现原理;2、掌握WINDOWS系统动态链接库的建立方法;3、掌握WINDOWS环境下动态链接库的调用方法;实验准备知识1、动态链接库基础知识;2、动态链接库入口函数(DLLMain);3、动态链接库导入/导出函数;声明导出函数的代码:_declspec(dllexport)MyDllFun(intx,inty);声明导入函数的代码:_declspec(dllimport)MyDllAdd(intx,inty);4、隐式链接和显式链接;实验
2、内容1、在WINDOWS环境下建立一个动态链接库;2、使用隐式调用调用动态链接库;3、使用显式调用调用动态链接库;实验要求1、掌握动态链接库建立和调用方法;2、在XP+VC6.0环境下建立一个动态链接库,并分别使用隐式和显式调用;实验内容1、动态链接库简介1.1DLL概述动态链接库(DynamicLinkLibray,简称DLL)是一些编译过的可执行的程序模块,可以在应用程序中或其他DLL中被调用。DLL的应用非常广泛,可以实现多个应用程序的代码和资源共享,是Windows程序设计中的一个非常重
3、要的组成部分。DLL设计程序的优点:·*共享代码、资源和数据。DLL作为一种基于Windows的程序模块,不仅可以包含可执行的代码,还可以包括数据和各种资源等,扩大了库文件的使用范围;·*可将系统模块化,方便升级。·*隐藏实现的细节;*DLL与语言无关;1.2DLL的调用不论使用何种语言对编译好的DLL进行调用时,基本上都有两种调用方式,即静态调用方式和动态调用方式。静态调用方式由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码(如还有其它程序使用该DLL,则Windows对DLL的应
4、用记录减1,直到所有相关程序都结束对该DLL的使用时才释放它),简单实用,但不够灵活,只能满足一般要求。动态调用方式是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,使用上较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。1.2.1DLL的静态调用DLL的静态调用由编译系统完成对DLL的加载和应用程序结束时DLL卸载,在VC中静态调用DLL非常简单,首先将动态链接库的.LIB文件和.DLL文件加入到应用程序的工程中,然后在使用DLL中的函数文件里引用DLL的头文件(.h
5、)即可。当开发人员通过静态方式编译并生成应用程序时,应用程序中的调用函数与LIB文件中的导出符号相匹配,这些符号或标示进入到生成的EXE文件中。当应用程序运行过程中需要加载DLL文件时,操作系统将根据这些信息查寻并加载DLL,然后通过符号或标示实现对DLL函数的动态链接。当加载应用程序的EXE文件时,所有被应用程序调用的DLL文件都被加载到内存中,这时可执行程序直接通过函数名调用DLL的输出函数,其调用方法与调用程序内部函数相同。1.2.2DLL的动态调用动态调用方式是由编程者用API函数加载和
6、卸载DLL来达到调用DLL的目的,动态调用是指在应用程序中使用LoadLibrary函数或MFC提供的AfxLoadLibrary函数显式调用自己所需要的动态链接库,动态链接库的文件名就是上面两个函数的参数,然后在使用GetProAddress()函数获取所需要引入的函数。完成上述操作后,应用程序可以调用引入的函数。在应用程序退出之前,应该使用FreeLibrary函数或MFC提供的AfxFreeLibrary函数来释放动态链接库。(静态链接、动态链接等基础概念见PDF文档)2、动态链接库的实现
7、2.1参考PDF文档,练习DLL文件的创建和调用;2.2简单MFCDLL例子例1:设计动态链接库,并向库中添加绘制矩形和椭圆的函数。(1)新建一个MFCAppWizard[dll]工程,给工程命名为mydll,如图:(1)单击确定进入下一步,如下图,可以对DLL的类型等进行设置,采用默认的设置即可,单击完成按钮,向导自动生成相关的文件和资源。(2)单击工作区的FileView页面,可以看到向导生成的文件。在头文件夹里有mydll.h文件,在源文件夹里有mydll.cpp文件,可以在mydll.h
8、文件里添加自定义函数的原型,在mydll.cpp文件中定义函数。此外,在源文件夹里还有一个mydll.def文件。(1)在mydll.h文件中添加函数原型,代码如下:、voidDrawEllipse(CClientDC*pDC,intx1,inty1,intx2,inty2);voidDrawRectangle(CClientDC*pDC,intx1,inty1,intx2,inty2);classCMydllApp:publicCWinApp{public:CMydllApp();//Over
此文档下载收益归作者所有