欢迎来到天天文库
浏览记录
ID:48154755
大小:1.87 MB
页数:47页
时间:2020-01-16
《设计“网络聊天”程序(DLL实现).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章设计“网络聊天”程序(DLL实现)7.17.27.37.4实现功能及设计思路主要知识点程序实现过程实例小结及扩展7.1实现功能及设计思路7.1.1功能描述在列表控件中选择用户,或在“发送给”组合框中选择接收人后,输入发送的消息内容,然后单击“发送信息”按钮将发送消息,如图7.1所示。如果选中“所有人”复选框后,那么消息内容或文件将被发送给局域网中的所有用户。7.1.1功能描述单击窗口上的“发送文件”按钮,将弹出一个文件“打开”对话框以选择需要发送的文件,如图7.2所示。7.1.1功能描述当接收到文件后,弹
2、出一个消息提示框并询问是否接收文件,如图7.3所示,如果单击“是”按钮则开始接收文件。7.1.2设计思路在创建套接字类动态链接库时,使用MFC创建常规的动态链接库,并在应用程序中隐式加载该动态链接库;在创建多线程动态链接库时,使用MFC创建扩展的动态链接库,并以动态显示的方式加载该动态链接库。7.2主要知识点7.2.1动态链接库概述1.DLL入口函数创建DLL时,可以有选择地指定DLL的入口函数DllMain。DllMain函数负责加载DLL的初始化和释放DLL的结束工作。每当一个新的进程或者该进程的新的线程访
3、问DLL时,或访问DLL的每一个进程或者线程不再使用DLL或结束时,都会调用DllMain函数。但需要注意的是,使用TerminateProcess或TerminateThread函数终止进程或者线程时,不会调用DllMain函数。典型的DllMain函数代码如下:extern"C"intAPIENTRYDllMain(HINSTANCEhInstance,DWORDdwReason,LPVOIDlpReserved){if(dwReason==DLL_PROCESS_ATTACH){//ExtensionDL
4、Lone-timeinitialization}elseif(dwReason==DLL_PROCESS_DETACH){//TerminatethelibrarybeforedestructorsarecalledTRACE0("DLLEXAMPLE.DLLTerminating!");}return1;//ok}7.2.1动态链接库概述2.导出、导入函数模块定义(.def)文件为链接器提供有关被链接程序的导出、属性及其他方面的信息。通常,在模块定义文件中,需要声明DLL的LIBRARY语句和EXPORT
5、S语句。例如:;DllExample.def:DeclaresthemoduleparametersfortheDLL.LIBRARY"DllExample"DESCRIPTION'DllExampleWindowsDynamicLinkLibrary'EXPORTS;ExplicitexportscangohereSendFileProc;导出SendFileProc函数7.2.1动态链接库概述使用__declspec(dllexport)修饰名可以显示地导出某个函数。通常,该修饰名被添加在函数声明前以说明导
6、出该函数。例如:extern“C”__declspec(dllexport)UINTSendFileProc(LPVOIDlParam);//声明导出SendFileProc为了能够在程序中使用DLL的导出函数,同样需要使用__declspec(dllimport)修饰名来说明需要导入的DLL函数。例如:extern"C"__declspec(dllimport)UINTSendFileProc(LPVOIDlParam);//声明导入SendFileProc在MFC中,为了能够方便地导入、导出函数、类,MFC
7、也定义了相应的导入、导出宏。根据导入、导出的不同类型,这些宏分为三类,分别用于C++类、API函数和数据变量的导入、导出声明。这些宏定义见表7.1。7.2.1动态链接库概述3.extern“C”修饰名在直接使用__declspec(dllimport)或__declspec(dllexport)修饰名导入、导出C函数时,需要添加extern“C”函数修饰名。extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其他模块中使用。通常,在C语
8、言的头文件中经常可以看到类似下面这种形式的代码:#ifdef__cplusplusextern"C"{#endif/****somedeclarationorso*****/#ifdef__cplusplus}#endif/*endof__cplusplus*/7.2.1动态链接库概述4.函数调用约定函数的调用约定指定了函数在被调用时,其函数参数入栈的顺序和产生函数修饰名的方法,以及指
此文档下载收益归作者所有