- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态链接库的加载动态链接库的加载
动态链接库的加载 本节课程主要知识点 动态链接库的加载 动态链接库的静态加载 动态链接库的动态加载 重点和难点 重点 动态链接库的加载方法 难点 静态调用中建立关联 动态链接库的加载 动态链接库的加载 动态链接库的加载分为即静态加载方式和动态加载方式。 静态加载方式是在编译程序代码时即完成对DLL的加载,应用程序结束时卸载DLL。 动态加载方式是使用用API函数来加载和卸载DLL的。 动态链接库的静态加载 动态链接库的静态加载 静态加载方式由编译系统完成对DLL的加载。 应用程序完成对DLL的卸载。 加载方法简单,但不够灵活。 LIB文件用来做什么? 在生成一个DLL文件时,链接程序会自动生成一个与之对应的LIB文件。 LIB文件包含了每一个DLL导出函数的符号名和可选的标识号,但是并不含有实际的代码。 编译应用程序 把生成动态连接库时生成的LIB文件和DLL文件加入到应用程序的工程中。 通过静态链接方式编译生成应用程序时,应用程序中的调用函数与LIB文件中导出符号相匹配,这些符号或标识号进入到生成的EXE文件中。 LIB文件作为DLL的替代文件被编译到应用程序工程中。 DLL中函数的调用(1/2) 当应用程序运行过程中需要加载DLL文件时,Windows CE根据LIB中的信息发现并加载DLL。 然后通过符号名或标识号实现对DLL函数的动态调用。 DLL中函数的调用(2/2) 所有被应用程序调用的DLL文件都会在应用程序EXE文件加载时被加载到内存中。 可执行程序直接通过函数名调用DLL的输出函数,调用方法和程序内部其他的函数是一样的。 DLL如何共享? DLL静态加载后,系统会建立对该DLL的调用记录。 如还有其它程序使用该动态链接库,则Windows CE对DLL的应用记录减1,直到所有相关程序都结束对该DLL的使用时才释放它。 DLL静态加载实例 利用VS2005生成动态链库wcedll.dll和wcedll.lib文件。 利用VS2005创建一个测试工程wcetest,用以测试动态链接库的静态加载。 设置依赖关系 将两个库文件wcedll.dll和wcedll.lib拷贝到当前测试工程wcetest所在的文件夹下。 选择wcetest工程,点击右键,在弹出的菜单中,选择Properties,进入Linker下的Input选项,在Additional Dependencies编辑框中添加wcedll.lib一项内容。 运行测试代码 编译并下载wcetest.exe,保证代码没有错误。 在目标平台上找到wcetest.exe应用程序,双击它,让其运行起来。 通过VS2005的Remote Process Viewer就可以看到wcetest.exe已经运行,而且wcedll.dll已经加载。 动态链接库的动态加载 动态链接库的动态加载 动态调用方式是由程序员编程使用API函数来加载和卸载DLL。 使用较复杂,但能更有效地使用内存,是编制大型应用程序的重要方式。 是一般常见的动态链接库的加载方法。 在嵌入式系统中更为常见。 如何实现DLL动态调用? 在应用程序中用LoadLibrary显式的将自己所做的动态连接库调进来。 用GetProcAddress()获取想要引入的函数。 如同本应用程序自定义的函数一样来调用该引入函数。 在应用程序退出之前,用FreeLibrary释放动态连接库。 DLL动态加载实例 利用VS2005创建一个测试工程wcetest1,用以测试动态链接库的动态加载。 与静态调用DLL相比,程序中增加以下代码 添加wcedll动态链接库工程实现函数定义。 利用LoadLibrary API函数动态加载动态链接库,利用GetProcAddress API函数获取需要引用的函数。 测试程序的源代码 #include windows.h typedef void (*printH) (void); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR szCmdLine,int iCmdShow) { HANDLE hModule=LoadLibrary(TEXT(“wcedll.dll”)); if(hModule==NULL) { return 0; } else { printH PrintHello= (printH) GetProcAddress(hModule,TEXT(PrintHello)); PrintHello(); } FreeLibrary(TEXT(wcedll.dll)); return 0; } 运行测试代码 编译并下载wcetes
您可能关注的文档
- 初二七班感恩、励志主题班会初二七班感恩、励志主题班会.ppt
- 初二人教版课程导报学案专刊1到6期答案初二人教版课程导报学案专刊1到6期答案.pdf
- 初二八班班会初二八班班会.ppt
- 初二写作指导:记叙中结合抒情和议论初二写作指导:记叙中结合抒情和议论.ppt
- 初二上英语开学第一课 PPT课件初二上英语开学第一课 PPT课件.ppt
- 初二实践(9-15)课初二实践(9-15)课.doc
- 初二八班赵宏博43号地理播报初二八班赵宏博43号地理播报.ppt
- 初二年级下学期英语阅读材料精选初二年级下学期英语阅读材料精选.doc
- 初二年级语文学法 第六讲 阅读——议论类课文初二年级语文学法 第六讲 阅读——议论类课文.ppt
- 初二年级主题班会初二年级主题班会.ppt
- 北师大版小学数学三年级上册《寄书》教学设计.docx
- 统编版(部编版)语文二年级上册《雪孩子》教学设计.docx
- 统编版(部编版)语文二年级上册《八角楼上》教学设计.docx
- 北师大版小学数学三年级上册《长方形周长》教学设计.docx
- 北师大版小学数学三年级上册《丰收了》教学设计.docx
- 统编版(部编版)语文二年级上册《夜宿山寺》教学设计.docx
- 统编版(部编版)语文二年级上册《风娃娃》教学设计.docx
- 统编版(部编版)语文二年级上册《朱德的扁担》教学设计.docx
- 统编版(部编版)语文二年级上册《难忘的泼水节》教学设计.docx
- 统编版(部编版)语文二年级上册《纸船和风筝》教学设计.docx
最近下载
- 米LED路灯灯杆检验报告.pdf VIP
- 临床诊疗指南肾脏病学分册_全文.pdf
- 中小学校园防疫科普讲义中小学防控诺如病毒主题班会课件.pptx VIP
- 安永-中国房地产行业2023年业绩概览及新质态下房地产行业发展新趋势.pdf VIP
- Nikon 尼康微型单电相机 Z系列Z 6 参考手册(完整说明书)Z7Z6RM_(Sc)05.pdf
- 2024年义务教育新课标新教材培训学习PPT课件:小学语文新教材内容整体变化解读.pptx
- 上海市高一信息技术上学期期中试题.docx
- 支架和钢管柱贝雷梁现浇简支箱梁施工安全质量控制要点.pptx VIP
- 名著导读《朝花夕拾》课件(共47张ppt).pptx VIP
- 商用车行业专题:全球客车潜力可观,中国车企大有可为.docx VIP
文档评论(0)