进程通信调试实验.doc

进程通信调试实验.doc

ID:51045262

大小:34.00 KB

页数:6页

时间:2020-03-08

进程通信调试实验.doc_第1页
进程通信调试实验.doc_第2页
进程通信调试实验.doc_第3页
进程通信调试实验.doc_第4页
进程通信调试实验.doc_第5页
资源描述:

《进程通信调试实验.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实验四进程通信调试实验[实验目的]1、掌握WinCE5.0下进程间通信机制;2、掌握通过对消息传递和共享内存的实现进程间通信的方法;3、了解实现进程通信的编程方法[实验仪器]1、装有PlatformBuilder、EVC和VS.Net开发平台的PC机一台2、XSBase270实验开发平台一套[实验原理]1、软件原理:在项目开发和系统集成中,进程间通信的应用非常广泛,进程间的通信有以下几种实现方法:利用Windows消息(WM_COPYDATA)、全局原子、内存映射、命名管道以及邮曹。下面介绍利用WM_COPYDATA和内存映射实现进程通信的方法。1.1WM_COPYDATA方法使用WM_C

2、OPYDATA消息可以很方便地传递进程间的数据,具体定义如下:SendMessage(hwnd,WM_COPYDATA,wParam,lParam);其中wParam设置为包含数据的窗体的句柄,lParam指向一个COPYDATASTRUCT的结构:typedefstructtagCOPYDATASTRUCT{DWORDdwData;//用户定义数据DWORDcbData;//数据大小PVOIDlpData;//指向数据的指针}COPYDATASTRUCT也就是通过COPYDATASTRUCT的结构来传递数据。需要注意的是,WinCE提供的WM_COPYDATA消息来传递进程间的数据,并没

3、有提供同步机制,所以必须要使用SendMessage函数来发送消息,且等待直到对方处理完后返回,而不能使用PostMessage函数来发送WM_COPYDATA。1.2内存映射文件的方法内存映射文件提供了一种完全不同的读写文件的方法,它是将文件内容映射到内存的某个区域,读写文件直接操作内存即可。下面介绍内存映射文件所需的API函数:(1)创建用于内存映射访问的文件6/6在WinCE中,要想创建或打开一个用于内存映射访问的文件,需要通过CreateFileForMapping函数来实现,它是CreateFile函数的一个特殊版本,专门提供给内存映射文件使用,CreateFileForMapp

4、ing函数的定义如下:HANDLECreateFileForMapping(LPCTSTRlpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTESlpSecurityAttributes,DWORDdwCreationDisposition,DWORDdwFlagsAndAttributes,HANDLEhTemplateFile);(2)创建或打开内存映射文件对象在使用内存映射文件时,需要创建或打开内存映射文件对象,它实际上是于已经创建或打开的文件建立连接。创建或打开内存映射对象通过CreateFileM

5、apping函数实现,此函数定义如下:HANDLECreateFileMapping(HANDLEhFile,LPSECURITY_ATTRIBUTESlpFileMappingAttributes,DWORDflProtect,DWORDdwMaximumSizeHigh,DWORDdwMaximumSizeLow,LPCTSTRlpName);成功创建内存映射文件对象,函数将返回一个内存映像对象句柄,如果在创建内存映射文件对象已存在,将直接返回已打开的内存映像文件对象句柄。(3)获取内存映像文件对象视图当创建或打开了内存映射对象之后。接着就需要得到内存映射文件对象的数据内存指针,通过此

6、指针则可以读写文件中的内容,也就是获取内存映射文件对象视图。得到内存映射文件对象的数据内存指针通过MapViewOfFile函数实现,此函数定义如下:LPVOIDMapViewOfFile(HANDLEhFileMappingObject,DWORDdwDesiredAccess,DWORDdwFileOffsetHigh,DWORDdwFileOffsetLow,DWORDdwNumberOfBytesToMap);函数返回值指向映射文件的内存指针。(4)取消文件视图的映射在使用完内存映射文件之后,还要调用UnmapViewOfFile函数取消文件视图,进行内存清理工作。此函数定义如下:

7、BOOLUnmapViewOfFile(LPCVOIDlpBaseAddress);6/62、进程通信的实现2.1WM_COPYDATA方法Client端的实现voidCClientDlg::OnBnClickedbtnsendmessage(){CStringstr=_T("Server");CWnd*pWnd=CWnd::FindWindow(NULL,str);UpdateData(TRUE);if(pWnd&&m

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。