查看完整版本: 如何实现win9X进程间数据通讯技术

雨树侠 2007-11-25 17:57

如何实现win9X进程间数据通讯技术

1、引言
  在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。WIN32 API提供了许多函数使我们能够方便高效地进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换,就如同在WIN16中对本地进程进行读写操作一样。
  典型的WIN16两进程可以通过共享内存来进行数据交换:

(1)进程A将GlobalAlloc(GMEM_SHARE...)API分配一定长度的内存;(2)进程A将GlobalAlloc函数返回的句柄传递给进程B(通过一个登录消息);(3)进程B对这个句柄调用GlobalLock函数,并利用GlobalLock函数返回的指针访问数据。这种方法在WIN32中可能失败,这是因为GlobalLock函数返回指向的是进程A的内存,由于进程使用的是虚拟地址而非实际物理地址,因此这一指针仅与A进程有关,而于B进程无关。
  本文探讨了几种WIN32下进程之间通讯的几种实现方法,读者可以使用不同的方
法以达到程序运行高效可靠的目的。
  2、Windows95中进程的内存空间管理
  WIN32进程间通讯与Windows95的内存管理有密切关系,理解Windows95的内存管理对我们如下的程序设计将会有很大的帮助,下面我们讨论以下Windows95中进程的内存空间管理。
  在WIN16下,所有Windows应用程序共享单一地址,任何进程都能够对这一空间中属于共享单一的地址空间和属于其他进程的内存进行读写操作,甚至可以存取操作系统本身的数据,这样就可能破坏其他程序的数据段代码。
  在WIN32下,每个进程都有自己的地址空间,一个WIN32进程不能存取另一个地
址的私有数据,两个进程可以用具有相同值的指针寻址,但所读写的只是它们各自
的数据,这样就减少了进程之间的相互干扰。另一方面,每个WIN32进程拥有4GB的
地址空间,但并不代表它真正拥有4GB的实际物理内存,而只是操作系统利用CPU的
内存分配功能提供的虚拟地址空间。在一般情况下,绝大多数虚拟地址并没有物理
内存与它对应,在真正可以使用这些地址空间之前,还要由操作系统提供实际的物
理内存(这个过程叫
页: [1]

查看完整版本: 如何实现win9X进程间数据通讯技术