预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

编号: 时间:2021年x月x日 书山有路勤为径,学海无涯苦作舟页码:第页共NUMPAGES6页 第PAGE\*MERGEFORMAT6页共NUMPAGES\*MERGEFORMAT6页 实验四进程通信调试实验 [实验目的] 1、掌握WinCE5.0下进程间通信机制; 2、掌握通过对消息传递和共享内存的实现进程间通信的方法; 3、了解实现进程通信的编程方法 [实验仪器] 1、装有PlatformBuilder、EVC和VS.Net开发平台的PC机一台 2、XSBase270实验开发平台一套 [实验原理] 1、软件原理: 在项目开发和系统集成中,进程间通信的应用非常广泛,进程间的通信有以下几种实现方法:利用Windows消息(WM_COPYDATA)、全局原子、内存映射、命名管道以及邮曹。下面介绍利用WM_COPYDATA和内存映射实现进程通信的方法。 1.1WM_COPYDATA方法 使用WM_COPYDATA消息可以很方便地传递进程间的数据,具体定义如下: SendMessage(hwnd,WM_COPYDATA,wParam,lParam); 其中wParam设置为包含数据的窗体的句柄,lParam指向一个COPYDATASTRUCT的结构: typedefstructtagCOPYDATASTRUCT{ DWORDHYPERLINK""dwData;//用户定义数据 DWORDHYPERLINK""cbData;//数据大小 PVOIDHYPERLINK""lpData;//指向数据的指针 }COPYDATASTRUCT 也就是通过COPYDATASTRUCT的结构来传递数据。 需要注意的是,WinCE提供的WM_COPYDATA消息来传递进程间的数据,并没有提供同步机制,所以必须要使用SendMessage函数来发送消息,且等待直到对方处理完后返回,而不能使用PostMessage函数来发送WM_COPYDATA。 1.2内存映射文件的方法 内存映射文件提供了一种完全不同的读写文件的方法,它是将文件内容映射到内存的某个区域,读写文件直接操作内存即可。下面介绍内存映射文件所需的API函数: (1)创建用于内存映射访问的文件 在WinCE中,要想创建或打开一个用于内存映射访问的文件,需要通过CreateFileForMapping函数来实现,它是CreateFile函数的一个特殊版本,专门提供给内存映射文件使用,CreateFileForMapping函数的定义如下: HANDLECreateFileForMapping( LPCTSTRHYPERLINK""lpFileName, DWORDHYPERLINK""dwDesiredAccess, DWORDHYPERLINK""dwShareMode, LPSECURITY_ATTRIBUTESHYPERLINK""lpSecurityAttributes, DWORDHYPERLINK""dwCreationDisposition, DWORDHYPERLINK""dwFlagsAndAttributes, HANDLEHYPERLINK""hTemplateFile ); (2)创建或打开内存映射文件对象 在使用内存映射文件时,需要创建或打开内存映射文件对象,它实际上是于已经创建或打开的文件建立连接。创建或打开内存映射对象通过CreateFileMapping函数实现,此函数定义如下: HANDLECreateFileMapping( HANDLEHYPERLINK""hFile, LPSECURITY_ATTRIBUTESHYPERLINK""lpFileMappingAttributes, DWORDHYPERLINK""flProtect, DWORDHYPERLINK""dwMaximumSizeHigh, DWORDHYPERLINK""dwMaximumSizeLow, LPCTSTRHYPERLINK""lpName ); 成功创建内存映射文件对象,函数将返回一个内存映像对象句柄,如果在创建内存映射文件对象已存在,将直接返回已打开的内存映像文件对象句柄。 (3)获取内存映像文件对象视图 当创建或打开了内存映射对象之后。接着就需要得到内存映射文件对象的数据内存指针,通过此指针则可以读写文件中的内容,也就是获取内存映射文件对象视图。得到内存映射文件对象的数据内存指针通过MapViewOfFile函数实现,此函数定义如下: LPVOIDMapViewOfFile( HANDLEHYPERLINK""hFile