实验五动态链接库建立和调用.doc

实验五动态链接库建立和调用.doc

ID:56293124

大小:56.00 KB

页数:9页

时间:2020-06-22

实验五动态链接库建立和调用.doc_第1页
实验五动态链接库建立和调用.doc_第2页
实验五动态链接库建立和调用.doc_第3页
实验五动态链接库建立和调用.doc_第4页
实验五动态链接库建立和调用.doc_第5页
资源描述:

《实验五动态链接库建立和调用.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验五:动态链接库的建立与调用1、实验目的(1)理解动态链接库的实现原理。(2)掌握Windows系统动态链接库的建立方法。(3)掌握Windows环境下动态链接库的调用方法。2、相关知识介绍动态链接库是一个可执行模块,它包含的函数可以由Windows应用程序调用以提供所需功能,为应用程序提供服务。2.1动态链接库基础知识大型的应用程序由很多模块组成,这些模块彼此协作,以完成整个软件系统的工作。其中可能有些模块的功能是通用的,被多个软件系统使用。在设计软件系统时,如果将整个模块的源代码都静态编译到整个应用程序.exe文件中,会产生两个问题,一是应用程序过大,运行时消耗较大的内存空间;

2、二是在修改程序时,每次程序的调整都必须编译所有的源代码,这个增加了编译过程的复杂度。Windows提供的动态链接库,可以将独立的模块单独编译和测试,生成动态链接库,运行时,只有在主程序需要时,才将动态链接库装入内存并运行。这样,不仅减少了应用程序的大小及对内存的大量需求,而且动态链接库可以被多个应用程序使用,从而充分利用了资源。Windows系统中一些主要的系统功能都是以动态链接库的形式出现的,如设备驱动程序等。动态链接库文件在Windows系统中的扩展名为.dll。它由全局数据结构、若干个函数组成,运行时被加载到进程的虚拟地址空间,成为调用进程的一部分。2.2动态链接库入口函数DL

3、LMain()函数是动态链接库的入口函数,当Windows系统加载动态链接库时调用该函数,同时在动态链接库与进程分离时也调用函数,每个动态链接库必须有一个入口点。就像c语言编程应用程序时必须有main()函数一样,在Windows系统的动态链接库中DLLMain()是默认的入口函数。原型:BOOLAPIENTRYDllMain(HANDLEhModule,DWORDul_reaseon_for_call,LPVOIDlpReserved){Returntrue;}参数说明:hMode:动态链接库句柄,其值与动态链接库的地址相对应ul_reason_for_call:系统调用该函数的原

4、因lpReserved:说明动态链接库是否需要动态加载或卸载。为NULL表示动态加载和卸载,否则表示静态加载,进程装入内存时同时加载链接库,进程终止时才卸载。使用入口函数还可以做一些初始化工作,如分配额外的内存或其他资源,在撤销时做一些清除工作,如回收占用的内存或其他资源。需要做初始化或清除工作时,DllMain()函数格式如下:BOOLAPIENTRYDllMain(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved){Switch(ul_reason_for_call){caseDLL_PROCESS_ATTACH:cas

5、eDLL_THREAD_ATTACH:caseDLL_THREAD_DETACH:caseDLL_PROCESS_DETACHbreak;}returnTURE;}初始化或清除工作分以下几种情况(1)DLL_PROCESS_ATTACH当动态链接库被初次映射到进程的地址空间时,系统将调用该动态链接库的DLLMain()函数,给它传递参数ul_reason_for_call的值DLL_PROCESS_ATTACH。当处理DLL_PROCESS_ATTACH时,动态链接库应执行动态链接库函数要求的任何与进程相关的初始化工作,如动态链接库堆栈的建立等。当初始化成功时,DllMain()返回

6、TRUE,否则返回FALSE,并终止整个进程的执行。(2)DLL_PROCESS_DETACH当动态链接库与进程分离时,系统将调用该动态链接库的DLLMain()函数,给它传递参数ul_reason_for_call的值DLL_PROCESS_DEATTACH。动态链接库执行与进程相关的清除操作,如堆栈的撤销等等。(3)DLL_THREAD_ATTACH(4)DLL_THREAD_DETACH2.3动态链接库导入/导出函数动态链接库文件中包含一个导出函数表,这些导出函数由它们的符号名和标识号被唯一地确定,导出函数表中还包含了动态链接库中的函数地址。当应用程序加载动态链接库时,通过导出

7、函数表中各个函数的符号名和标识号找到该函数的地址。如果重新编译动态链接库文件,并不需要修改调用动态链接库的应用程序,除非改变了导出函数的符号名和其他参数。在动态链接库源程序文件中声明导出函数的写法如下:原型:__declspec(dllexport)MyDLLFunction(intx,inty)其中__declspec(dllexport)表示要导出其后的函数MyDLLFunction(intx,inty)。如果动态链接库文件中的函数还需要调用其它动态链

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

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

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