- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows应用程序与动态链接库 DLL简介 DLL是一个可以执行的并可以被多个Windows应用程序共享的程序模块(称为Module),模块中包含了一些可以被多个Windows应用程序或DLL共享的代码、数据和资源。 动态连接库文件的扩展名一般是dll,也有可能是drv,sys和fon(它们分别对应的是设备驱动文件、系统文件和字体资源文件)。 DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式. DLL简介 DLL是Windows最重要的组成要素,Windows中的许多新功能、新特性都是通过DLL来实现的Windows本身就是由许多的DLL组成的,它最基本的三大组成模块Kernel、GDI和User都是DLL,它所有的库模块也都设计成DLL。 凡以 .DLL、.DRV、.SYS和许多以 .EXE为扩展名的系统文件都是DLL,打开Windows\System目录,就可以看到许多的DLL模块。 静态链接和动态链接 (1)静态链接 传统的库函数是通过静态链接链到应用程序中的。这些库函数可能来自编程语言提供的标准库,也可能是由操作系统提供的API。 静态链接和动态链接 动态链接是指在把应用程序的目标代码链接成EXE文件时并没有将函数库中的函数复制到应用程序的可执行文件中,而是在程序运行时动态地加载所需的函数。 DLL特点 一个DLL在内存中只有一个实例,使之能高效经济地使用内存,降低可共享代码的内存使用量; DLL实现的代码封装性,使得程序简洁明晰,提供给每个程序组一致的APIs让用户进行调用,在用户程序运行时被载入; DLL的编制与具体的编程语言及编译器无关,只要遵守DLL的开发规范和编程策略,并安排正确的调用接口,不管用何种编程语言编制的DLL都具有通用性。 创建DLL 创建带有输出原型/结构/符号的头文件 创建实现输出函数/变量的C/C++源文件 编译器为每个C/C++源文件生成.obj文件 链接程序结合.obj模块以生成DLL 如果至上有一个函数/变量输出,则链接程序同时也生成.lib文件 DLL的调用 隐式调用 隐式调用又称静态调用或装载时调用,对应于DLL的静态载入。要在应用程序中隐式调用某个动态链接库中的函数,一般要做以下两件事情: (1)用extern子句声明要调用的过程或函数及其所在的DLL文件名; (2)在应用程序中直接调用用extern子句声明的过程 DLL的调用 显示调用 定义一个与调用函数一致的函数类型; 用LoadLibrary或SafeLoadLibrary函数动态载入动态链接库; 用GetProcAddress得到要调用的函数或过程的地址; 利用定义的函数类型生成一个同类型的函数变量; 进行函数调用; 利用FreeLibrary函数卸载动态链接库。 DLL的调用 显示调用(只需获得DLL文件,并且知道要调用的函数名和参数) 先用LoadLibrary加载dll,再用GetProcAddress检索所需的函数句柄,并且显式地用FreeLibrary卸载。 隐式调用(需要.dll文件和生存的.lib库) 应用程序链接前将.dll文件拷入应用程序的debug中,并将.lib文件引入。 DLL的导入和导出 DLL包含一个导出函数表,函数表包含了函数在DLL 内的地址,可以通过函数的符号化名字和称为序号 的整数识别这些函数。客户程序首先装入DLL时并不 知道要调用的函数地址,但知道符号名或序号。动 态链接的进程建立一张表,把客户的调用和DLL里的 函数地址连结起来。 在DLL代码中,必须显示声明导出函数: _declspec(dllexport) void Func(char[],DWORD) 应用程序方面需要声明对应的导入函数: _declspec(dllimport) void Func(char[],DWORD) DLL函数的入口地址 BOOL WINAPI DllMain //函数名DllMain是区分大小写的 (HANDLE hinstDll, //包含了DLL的实例句柄 DWORD fdwReason, //系统调用该函数的原因 LPVOID lpReserved) //0表示显示链接,非0表示隐式 示例:编写一个简单的DLL模块并在用户程序中进行调用 示例运行结果: 实验四 创建一个DLL模块实现两个正整数的相加功能,创建一个应用程序调用该DLL模块 * * (2)动态链接
您可能关注的文档
- 全国计算机等级考试二级公共辅导讲义.doc
- 全国计算机等级考试二级基础知识.doc
- 全国计算机等级考试公共基础知识讲义.doc
- 全国计算机二级C等级考试辅导讲义.doc
- 全国计算机二级VF公共基础知识考题.doc
- 全国计算机二级vf考试笔试04年9月笔试试题.doc
- 全国计算机二级vf考试笔试05年9月笔试试题.doc
- 全国计算机二级等级考试计算机基础知识(1).doc
- 全国计算机考试二级笔试试卷.doc
- 全国计算机软考网管英语试题及答案(2).doc
- windows应用程序基础.ppt
- Windows应用程序开发入门到精通 Creat Top Notch User Experiences With Windows Formsin.ppt
- Windows应用程序开发入门到精通 Object Oriented Concepts NET WinForms Application.ppt
- Windows应用程序开发入门到精通 Windows应用程序界面美化-20041216.ppt
- Windows应用程序开发入门到精通十一:提高Web应用程序的用户体验——使用智能客户端开发分布式的Windows Fo.ppt
- Windows应用程序开发入门到精通:BringingQualityProducts.ppt
- Windows文件管理1.ppt
- WINDOWS架设WEB服务器的安全防护.ppt
- Windows界面编程.ppt
- windows程序设计与MFC基础.ppt
最近下载
- 全南2019年招聘中小学幼儿园教师工作方案.doc VIP
- 《教师职业道德》教师职业道德概述.pptx VIP
- 2025年湛江中心人民医院医护人员招聘参考题库含答案解析.docx VIP
- 2025年湛江市中心人民医院医护人员招聘参考题库附答案解析.docx VIP
- 在线网课学习课堂《Advanced Medical English(首都医大 )》单元测试考核答案.docx VIP
- 青岛科技大学四方校区物业管理服务公开招标.doc VIP
- Delta影像组学在急性外踝韧带损伤修复疗效预测中的应用.docx VIP
- 黄炎培创业大赛 路演ppt(获奖).pptx VIP
- 2024年版《陕西省园林绿化工程消耗量定额》.pdf VIP
- 2024版食堂工作培训ppt课件 .pdf VIP
文档评论(0)