前一篇中简单介绍了进程间通讯的机制之一-------消息机制。本篇中我简要的描述一下进程间通讯的另一种机制----------内存共享机制。

WINDOWS中要使用内存共享的方式在进程间通讯需要采用DLL方式。由于WIN32把DLL装入全局内存并把DLL映射到每个程序的地址空间。所有载入DLL的应用程序只能共享程序代码,不能共享数据。要想使DLL的数据区能设计成共享的存储区,可以通过#pragma data_seg指令来建立一个新段来做完成。但是这样还不能够做到数据共享,还要把段中将要共享的变量告诉连接器。以下对这个过程进行介绍:

1,新建一个空的DLL工程,向里边添加相应的文件;

2,在.def文件中添加以下代码

SECTIONS

        MyShared READ WRITE SHARED

3,在CPP文件中添加以下代码,记住共享数据变量的初始化很重要

#pragma data_seg("MyShared")
char No[256]=TEXT("");     //共享数据变量

volatile bool bInCriticalSection=false;   //数据同步标志
#pragma data_seg()
#pragma comment(linker,"/SECTION:MyShared,RWS")

CCriticalSection cs;       //同步标志

4,在CPP文件中添加对共享数据区的读写函数:

//读取数据

WINAPI  LPSTR GetNo()

{

     while(bInCriticalSection)

    {

       Sleep(1);

    }

    return No;

}

//写数据

WINAPI void SetNo(LPCSTR lpStr)

{

     while(bInCriticalSection)

    {

       Sleep(1);

    }

    cs.Lock();
   bInCriticalSection=true;
   strcpy(No,lpStr);
   bInCriticalSection=false;
   cs.Unlock();

}

5,新建两个应用程序,将DLL头文件和LIB文件包含到程序中:

#include"DllTest.h"

#pragma comment(lib,"DllTest.lib")

就可以使用以上两个函数(GetNo,SetNo)进行进程间通讯了。具体的我就不多说了。

posted on 2011-01-05 00:00  GT_Andy  阅读(1380)  评论(0编辑  收藏  举报