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毫秒