进程共享数据封装成类

来源:互联网 发布:网络教学的设计原则 编辑:程序博客网 时间:2024/05/29 12:22

.cpp

#include "ShareMemory.h"CShareMemory::CShareMemory(constchar* pszMapName, int nFileSize, BOOL bServer):m_hFileMap(NULL),m_pBuffer(NULL){if (bServer) //是服务端,就创建{m_hFileMap = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_EXECUTE_READWRITE, 0, nFileSize, pszMapName);}else //否则就打开{m_hFileMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, pszMapName);}//把它映射到内存m_pBuffer = ::MapViewOfFile(m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);}CShareMemory::~CShareMemory(void){::UnmapViewOfFile(m_pBuffer);::CloseHandle(m_hFileMap);}


.h

#pragma once#include <Windows.h>class CShareMemory{public:CShareMemory(constchar* pszMapName, int nFileSize=0, BOOL bServer=FALSE);~CShareMemory(void);//属性LPVOID GetBuffer() const {return m_pBuffer;}//实现private:HANDLE m_hFileMap;LPVOID m_pBuffer;};


使用时:

服务端:

#include "ShareMemory.h"int main(int argc, char *argv[]){//进程间内存共享LPCTSTR lpName= "hello";LPCTSTR lpContent = "123456";CShareMemory* pShareMemory = new CShareMemory(lpName, 20, FALSE);LPVOID lpBase = pShareMemory->GetBuffer();strcpy((char*)lpBase, lpContent);printf("%s\n",(char*)pShareMemory->GetBuffer());getchar();return 0;}

客户端:

#include "ShareMemory.h"int main(int argc, char *argv[]){//进程间内存共享LPCTSTR lpName= "hello";LPCTSTR lpContent = "123456";CShareMemory* pShareMemory = new CShareMemory(lpName, 20, FALSE);printf("%s\n",(char*)pShareMemory->GetBuffer());getchar();return 0;}