Programming 版 (精华区)
发信人: li (星一), 信区: Programming
标 题: Windows 95进程间数据通讯的实现技术(5)
发信站: 紫 丁 香 (Sat Sep 26 16:54:48 1998), 转信
当用户进程结束使用共享内存后,调用
UnmapViewOfFile函数以取消其地址空间内的视图:
if (!UnmapViewOfFile(pszMySharedMapView))
{ AfxMessageBox("could not unmap view of file"); }
3.2、利用共享内存DLL
共享数据DLL允许进程以类似于Windows 3.1
DLL共享数据的方式访问读写数据,多个进程都可以
对该共享数据DLL进行数据操作,达到共享数据的目
的。在WIN32中为建立共享内存,必须执行以下步骤:
首先创建一个有名的数据区。这在Visual C++中是
使用data_seg pragma宏。使用data_seg
pragma宏必须注意数据的初始化:
#pragma data_seg("MYSEC")
char MySharedData[4096]={0};
#pragma data_seg()
然后在用户的DEF文件中为有名的数据区设定共
享属性。
LIBRARY TEST
DATA READ WRITE
SECTIONS
.MYSEC READ WRITE SHARED
这样每个附属于DLL的进程都将接受到属于自己
的数据拷贝,一个进程的数据变化并不会反映到其他
进程的数据中。
在DEF文件中适当地输出数据。以下的DEF文件
项说明了如何以常数变量的形式输出MySharedData。
EXPORTS
MySharedData CONSTANT
最后在应用程序(进程)按外部变量引用共享数
extern _export"C"{char * MySharedData[];}
进程中使用该变量应注意间接引用。
m_pStatic=(CEdit*)GetDlgItem(IDC_SHARED);
m_pStatic->GetLine(0,*MySharedData,80);
3.3、用于传输只读数据的WM_COPYDATA
传输只读数据可以使用Win32中的
WM_COPYDATA消息。该消息的主要目的是允许在
进程间传递只读数据。Windows95在通过
WM_COPYDATA消息传递期间,不提供继承同步方
式。SDK文档推荐用户使用SendMessage函数,接受
方在数据拷贝完成前不返回,这样发送方就不可能删
除和修改数据:
SendMessage(hwnd,WM_COPYDATA,wParam,lPa
ram);
其中wParam设置为包含数据的窗口的句柄。
lParam指向一个COPYDATASTRUCT的结构:
typedef struct tagCOPYDATASTRUCT{
DWORD dwData;//用户定义数据
DWORD cbData;//数据大小
PVOID lpData;//指向数据的指针
}COPYDATASTRUCT;
该结构用来定义用户数据。
--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: club.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.178毫秒