本文實例講述了C++進程共享數據封裝成類的方法,分享給大家供大家參考。具體方法如下:
ShareMemory.cpp源文件如下:
#include "ShareMemory.h"
CShareMemory::CShareMemory(const char* 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);
}
ShareMemory.h頭文件如下:
#pragma once
#include <Windows.h>
class CShareMemory
{
public:
CShareMemory(const char* 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;
}
希望本文所述對大家的C++程序設計有所幫助。