- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC++ 动态链接库的应用 毕业论文PPT【荐】.ppt
VC++环境下动态链接库的开发及应用 指导老师:彭利宁 学生姓名:刘展鹏 一、概论 1.1. 研究背景 自从微软推出16位的Windows操作系统起,此后每种版本的 Windows操作系统都非常依赖于动态链接库(DLL)中的 函数和数据 Windows操作系统中使用DLL有很多优点 因此,研究DLL的开发与应用具有重要意义! 1.3. 静态链接库与动态链接库的区别 动态链接发生在程序运行时,动态链接的函数代码不出现在程序的EXE文件中,它仅仅包含了应用程序运行过程中所调用的DLL函数的一些最基本信息(例如DLL文件位置、函数名等); 而静态链接发生在编译时,静态链接的函数代码实际被插入到程序的EXE文件中。 1.4. 动态链接库的优点 (1)扩展了应用程序的特性; (2)可以用许多种编程语言来编写; (3)简化了软件项目的管理; (4)有助于节省内存; (5)有助于资源共享; (6)有助于应用程序的本地化; (7)有助于解决平台差异。 1.5. 在以下这些情况下,必须使用动态链接库: (1)多个应用程序共享代码和数据 (2)在各子程序过滤系统消息时必须使用动态链接库 (3)设备驱动程序必须是动态链接库 (4)在对话框编辑器中使用自己定义的控件,也必须使 用动态链接库 (5)为了实现应用程序的国际化,往往需要使用动态链接库 1.6. Visual C++支持的动态链接库的类型 (1) 非MFC动态库 指不使用MFC类库创建的DLL。 (2) MFC规则DLL MFC规则DLL可以使用MFC来创建,可以导出C风格的函数,但不能导出C++类、成员函数或重载函数。它们可以被MFC或非MFC应用程序调用。 (3) MFC扩展DLL 在MFC扩展DLL中,可以由现有的MFC类导出自己的类,然后给应用程序一个扩展的MFC版本。 二、非MFC动态链接库 2.1. Non-MFC DLL动态链接库的创建 在Visual C++6.0开发环境下,打开File/New/Project选项 选择Win32 Dynamic-Link Library创建一个简单DLL工,并 命名为“MyDll”。 在建立的工程中添加lib.h及lib.cpp文件,源代码如下: /* 文件名:lib.h */ #ifndef LIB_H #define LIB_H extern C int __declspec(dllexport)multi(int x,int y); #endif /* 文件名:lib.cpp */#include lib.h int multi(int x,int y) { return x*y; } (3)建立一个与MyDll工程处于同一工作区的应用工程DllCall。 在工程“DllCall”创建源代码文件“DllCall.cpp”,它调用DLL中的函数multi,其源代码如下: #include stdio.h #include windows.h typedef int(*lpmultiFunc)(int,int); //宏定义函数指针类型 int main() { HINSTANCE hDll; //DLL句柄 lpmultiFunc multiFunc; //函数指针 hDll = LoadLibrary(..\\Debug\\MyDll.dll); if (hDll != NULL) { multiFunc = (lpmultiFunc)GetProcAddress(hDll, multi); if (multiFunc != NULL) { int result = multiFunc(3,5); //计算3与5的乘积 printf(%d\n,result); } FreeLibrary(hDll); } return 0; } 编译,运行结果如下: 代码分析 通过以上例子分析可得出以下结论: (1)DLL中需以某种特定的方式声明导出函数(或变量、类); (2)应用工程需以某种特定的方式调用DLL的导出函数(或变量、类)。 2.3. DLL的调用方式 (1) 动态调用 系统Api提供的三位一体“DLL加载-DLL函数地址获取-DLL释放”方式 (2) 静态调用 静态调用方式的特点是由编译系统完成对DLL的加载和应用程序结束时 DLL 的卸载 如以下例子所示: 将编译MyDll工程所生成的.lib和.dll文件拷入dllCall工程所在的路径 在dllCall源文件下执行下列代码: #include stdio.h #pragm
您可能关注的文档
最近下载
- 初一新生入学数学摸底测试题.doc VIP
- 2024年国家公务员考试公文基础知识试题库及答案(共291题).pdf VIP
- 儿童全麻下口腔治疗护理.pptx VIP
- 苏G9401 120预应力混凝土空心板图集(冷扎带肋钢筋).docx VIP
- (2024秋新改)人教版七年级数学上册全册教案.doc
- 1.2探索智慧温室大棚 教学设计-2025-2026学年八年级上《信息科技》(教科版).docx VIP
- 2025上半年中级软件水平考试《嵌入式系统设计师(综合知识)》真题卷(附详细解析).pdf VIP
- 14449小学课程与教学设计-电子教辅.pdf VIP
- 日产-贵士-产品使用说明书-贵士 2014款-VLJALPZE52EX7DE5-GUEST用户手册.pdf VIP
- 皮肤科简介PPT课件.ppt VIP
文档评论(0)