热区技术中的动态链接库应用_第1页
热区技术中的动态链接库应用_第2页
热区技术中的动态链接库应用_第3页
热区技术中的动态链接库应用_第4页
热区技术中的动态链接库应用_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、热区技术中的动态链接库应用摘要:动态链接库,简称DLL,英文全称“DynamicLinkLibrary”c动态链接是相对于静态链接而言的。动态连接库是一个可以同时被多个程序使用的代码和数据的库,也可以理解为是一个可以被其它应用程序共享的程序模块。分析了热区技术中的动态链接库的应用。关键词:热区;动态连接库;隐式调用;显示调用;DLL0引言随着计算机的快速发展,计算机的应用日益广泛,计算机软件的开发越来越重要,各种应用软件越来越多。在Windows平台下同时打开多个可视化程序会导致Windows桌面的复杂化。为了简化屏幕,在一些应用软件中,都具有热区的功能。例如我们比较熟悉的QQ,当把QQ拖到屏

2、幕的某一区域时,QQ自动隐藏;当把鼠标移回到某一区域时QQ可以自动弹出。一般我们把这种可以自动隐藏和弹出程序的区域称为热区。动态连接库是一个极其重要的技术,它可以使开发人员通过编写动态链接库,方便灵活地实现大型程序的开发。本文介绍了在C+Builder6.0平台下实现热区的过程中,通过编写动态链接库的方法,介绍了动态连接库的应用。1动态链接库动态链接是与静态连接相对的。动态链接库(DLL)在物理上是一些独立的可执行代码的集合,同时也可以存放各种资源。虽然动态链接库中存放可执行代码,但本身是不能运行的,只有被其它应用程序在运行时加载后,装入到应用程序占用内存的代码段,由应用程序调用动态链接库的代

3、码,如图1所示。一般来说,DLL是一种磁盘文件,以.DLL、.DRV、.FON.SYS和许多以.EXE为扩展名的系统文件都可以是DLL。如果与其它DLL之间没有冲突,该文件通常映射到进程虚拟空间的同一地址上。DLL模块中包含各种导出函数,用于向外界提供服务。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式。一个DLL在内存中只有一个实例;DLL实现了代码封装性。DLL的编制与具体的编程语言及编译器无关。在Windows操作系统中,DLL对于程序执行是非常的重要。DLL不是一个可运行的程序,只能编译,生成DLL系统文件,然后加载到应用程序中。当删除程序的时候,没有

4、用的DLL文件也应该删除,不然随着安装程序的越来越多,DLL文件也会越来越多,久而久之就会造成系统的负担。动态链接库代码在运行时间加载的特性很重要。一个大型程序如果不使用动态链接库,那么当这个程序的某一个功能需要升级或改进,必须写一些源代码,然后将整个程序编译,连接形成一个新的可执行文件,最终给客户重新安装使用。这个过程需要花费很长时间,哪怕只是给这个大型程序多写一行代码。可是,如果采用大量动态链接库构建整个应用程序,那么只需要改写需要升级的动态链接库的源代码,重新编译连接后,发送给客户,客户所做的仅仅是覆盖原来的动态链接库即可,不需要重新安装整个应用程序。使用动态链接库构建整个应用程序是模块

5、化设计程序的一个重要特点。2动态链接库的使用方式其它应用程序需要使用DLL时,需要调用DLL文件,有两种调用方式:静态调用方式和动态调用方式。2.1静态调用方式也称为隐式调用方式。需要应用程序运行前,将伴随DLL文件发布的lib文件添加到工程中,并且使用DLL的文件中inelude伴随DLL文件发布的h文件。然后就可以像调用一般函数一样调用DLL的导出函数。2.2动态调用方式也称为显示调用方式。指在应用程序中运用LoadLibrary函数,DLL文件能被显式地映射到进程的地址空间。动态调用方式的优点是在客户程序使用动态链接库的时候不需要包括含有导出函数声明的头文件,也不需要导入动态链接库生成的

6、类型库(一组LIB文件)。动态链接库的创建很多开发工具有专门的向导(比如C+Builder)。这里需要主要的是在应用程序退出之前,应该用FreeLibrary释放动态连接库。3热区动态链接库的建立和用法在C+builder6.0集成开发环境中,建立一个From1,设置为热区。通过菜单File|New|Other打开一个NewItems对话框,选择New中的DLLWizard。生成DLL的主单元文件。将会看到有如下的代码:#inelude#inelude#pragmahdrstop#pragmaargsusedintWINAPIDllEntryPoint(HINSTANCEhinst,unsig

7、nedlongreason,void*lpReserved)return1;这里DllEntryPoint()是DLL的入口函数,它将在DLL加载和卸载时被调用,调用的具体情况取决于参数reasor。hinst是DLL自身的句柄。lpReserved用来说明进一步的参数。下面在DLL库中加入代码以实现热区的功能,加入代码如下:#definemHookWM_USER+1000/自己定义的消息HINSTANCEhinst=NULL;/DLL的句柄HHOOKhHook二NULL;/Hook的句柄externCvoid_export_stdcallInstallHook();II鼠标钩子安装且提供为外

8、部接口void_export_stdcallUnInstallHook();鼠标钩子解除且提供为外部接口LRESULTCALLBACKMouseProc(intnCode,WPARAMwParam,LPARAMlParam)/回调函数/对鼠标的坐标进行判断并返回;HWNDhWnd=FindWindow(NULL,热区);MOUSEHOOKSTRUCT*mhStruct=(MOUSEHOOKSTRUCT*)lParam;PostMessage(hWnd,mHook,mhStruct-pt.x,mhStruct-pt.y);returnCallNextHookEx(hHook,nCode,wPar

9、am,lParam);找到使用DLL的窗体函数,返回需要的参数。void_stdcallInstallHook()if(!hHook)hHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,hInst,0);void_stdcallUnInstallHook()if(hHook)UnhookWindowsHookEx(hHook);intWINAPIDllEntryPoint(HINSTANCEhinst,unsignedlongreason,void*lpReserved)hInst二hinst;/DLL自身的句柄return1;这样可以很容易

10、的实现热区所需要的返回参数值。还可以实现代码的封闭性。特别是像一些语言类的软件,可以分别将各种语言独立写在DLL中。以供独立使用。在升级时,可以分别独立的对库升级。编译生成动态链接库。这样加载到应用程序后就可以实现想要的功能。当入口点函数返回FALSE值时,如果使用的是加载时动态链接,则应用程序不启动。如果使用的是运行时动态链接,则只有个别DLL不会加载。在Form1头文件.h中做声明,声明为public。声明如下:void_fastcallWndProc(Messages:TMessage&Message);boolflag;然后在Froml的*cpp文件中编写实现热区功能的函数,用隐式调用

11、的方式进行处理。#definemHookWM_USER+1000externCvoid_stdcallInstallHook();/外部DLL安装鼠标钩子函数void_stdcallUnInstallHook();/外部DLL解除鼠标钩子函数void_fastcallTForm1:FormCreate(TObject*Sender)flag二false;Caption二热区;/设置windows名称InstallHook();/安装鼠标钩子void_fastcallTForm1:FormClose(TObject*Sender,TCloseAction&Action)UnInstallHook

12、();/解除鼠标钩子编写功能函数,确定热区的区域范围。添加控件Label1用来显示鼠标屏幕坐标、Label2用来显示Form的最大坐标值。void_fastcallTfrmMain:WndProc(Messages:TMessage&Message)intx,y;staticintxRange,yRange;if(Message.Msg=mHook)x=Message.WParam;mhStruct-pt.x,y=Message.LParam;mhStruct-pt.yif(flag&(xxRange|yyRange|xVisible二false;if(x=Left&x=xRange&yVis

13、ible=true;Label1-Caption=AnsiString(Message.WParam)+,+Message丄Param;显示鼠标屏幕坐标Label2-Caption=AnsiString(xRange)+,+AnsiString(yRange);/显示Form的最大坐标值if(Message.Msg=WM_MOVE)yRange二Top+Height;/得到Form的最大横坐标xRange二Left+Width;得到Form的最大纵坐标if(Form1-TopTop=0;flag二true;if(Top=20)flag二false;TForm:WndProc(Message);

14、在C+Builder6.0下编译运行通过,实现了热区的功能。4动态链接库的优点动态链接库有很多的优点,总结如下:(1)代码的复用。DLL代码可以供多个程序使用。如某个设备的驱动程序可以通过DLL发布,需要使用该设备的应用程序都可以通过调用这个DLL实现,这就避免为一个功能重复开发多份代码。(2)代码在应用程序间共享。DLL的好处不仅在逻辑上的共享,还包括物理上的共享。多个应用程序使用DLL时,不必DLL代码的拷贝,它们可以共享已载入物理内存的DLL代码段,这样可以节约每个应用程序所占的内存。(3)代码按功能分离。DLL能将应用程序代码中重要和独立的功能分离出来,以后程序这部分功能的修改、升级,只要替换该DLL文件。同时程序的维护也方便了。动态库可被多种计算机语言调用,便于在各种环境下的系统集成。5结束语动态链接库实际上还有很多应用,如:组件技术、Windows服务等等。动态链接库可以实现代码和资源的共享,大大减少系统资源的占用,因此在当今的应用程序开发中起着非常重要的作用。参考文献:CHARLIECALVERT.C+Builder应用开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论