- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第13章 动态链接库 本章主要内容 动态连接库的概念及其组成 动态连接库的创建 动态连接库的使用 13.1?动态链接库的基本概念 Windows 使用DLL实现程序模块共享。 其特点是: 动态链接的; 公用的; 自动卸载。 DLL由全局数据、可导出函数、类和资源组成。 13.1?动态链接库的基本概念 动态链接库的入口函数 BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { //可以在这里编写DLL的初始化代码 return TRUE; } 13.1?动态链接库的基本概念 导出函数和内部函数 DLL中定义的供外部应用程序调用的函数,叫做导出函数(export?function); 只为在DLL内部调用的函数叫做内部函数(internal?function); 导出函数在客户端叫做导入函数。 13.2?动态链接库的创建 13.2?动态链接库的创建 使用def文件声明导出函数 def文件又叫做模块定义文件,是用于描述DLL属性的文本文件。def文件一般包括以下模块定义语句: LIBRARY语句,指出DLL的名字。 EXPORTS语句,列出库中导出函数的名称及导出函数的序号(可选)。 DISCRIPTION语句,描述DLL的用途等说明。 13.2?动态链接库的创建 例如?; DLL名字为SampleLIBRARY? Sample; 函数ShowMe为导出函数EXPORTS ShowMe ;def文件结束 13.2?动态链接库的创建 在创建DLL时,编译链接器先使用def文件创建两个文件:一个导出文件(.EXP)和一个导入库文件(.LIB),然后使用导出文件再创建DLL文件。 导入库文件中存放了外部应用程序可导入的DLL导出函数名称的列表,函数的代码则存放在DLL文件中。 外部应用程序使用的文件是导入库文件和DLL文件。 13.2?动态链接库的创建 使用关键字_declspec(dllexport)声明导出函数 例如,声明函数ShowMsg为导出函数。_declspec(dllexport) int ShowMsg(int s); //导出C格式的函数(用C++编写的DLL函数) extern“C” _declspec(dllexport) int ShowMsg(int s); 13.2?动态链接库的创建 用MFC编写DLL 在VC++中还可以使用MFC来编写DLL。MFC支持两种形式的DLL:常规型DLL和扩展型DLL。 MFC常规型DLL 常规型DLL可用于MFC应用程序和非MFC应用程序。用MFC AppWizard创建MFC DLL框架时,在New对话框中的Projects选项卡中选择MFC AppWizard(dll)选项,在出现的对话框中选择创建常规型DLL即可。 MFC把DLL的入口函数DLLMain封装在CWinApp中。 导出项目要使用关键字_declspec(dllexport)来说明。 13.2?动态链接库的创建 MFC扩展型DLL 扩展型DLL可以导出MFC的继承类。 在扩展型DLL中,在类的名称前面加宏AFX_EXT_CLASS,就可以把一个MFC继承类声明为导出类。 例如: calss AFX_EXT_CLASS CMyDllClass:public CObject { …… }; 13.3??动态链接库的使用 应用程序使用DLL的导出函数有两种方式: 隐式链接; 显式链接。 隐式链接方式 需要使用DLL的应用程序把该DLL的导入文件加到应用程序的项目中。应用程序运行时,Windows会根据导入文件提供的信息加载DLL,应用程序通过函数名实现对DLL函数的动态链接。由于在程序中没有出现加载DLL的代码,所以把这种链接方式叫做隐式链接。 13.3??动态链接库的使用 显式链接方式 在应用程序中使用Windows API函数直接完成DLL加载及函数调用,称为DLL的显式链接方式。具体步骤如下: 获得DLL库 获得DLL?函数 释放DLL库 13.3??动态链接库的使用 例如: typedef void (TESTDLL)(); HINSTANCE hDllInst; //获得DLL库 hDllInst=::LoadLibrary (”test.dll); if(hDllInst==NULL) { AfxMessageBox(Fail); } //获得DLL函数 TESTDLL* lpproc; 13.3??动态链接库的使用 lpproc=(TESTDLL*)G
您可能关注的文档
最近下载
- 17J008 挡土墙(重力式、衡重式、悬臂式)(最新).pdf VIP
- 雨污分流改造工程施工组织设计方案.pdf VIP
- 第九版儿科学配套课件-6.2-正常足月儿和早产儿的特点与护理.ppt VIP
- T_CACM 1601-2024 笑病中医诊疗指南.docx VIP
- 矿山三级(二级)矿量管理办法.doc VIP
- T_CACM 1583-2024 百合病中医诊疗指南.pdf VIP
- 趣味生物知识竞赛100选择题附答案.pdf VIP
- T_CACM 1584-2024 卑惵中医诊疗指南.pdf VIP
- 2025年第二批陕西延长石油集团所属单位内部遴选及选聘81人笔试参考题库附带答案详解.docx
- T_CACM 1585-2024 产后神志异常中医诊疗指南.pdf VIP
文档评论(0)