C++進(jìn)程共享數(shù)據(jù)封裝成類實(shí)例
本文實(shí)例講述了C++進(jìn)程共享數(shù)據(jù)封裝成類的方法,分享給大家供大家參考。具體方法如下:
ShareMemory.cpp源文件如下:
CShareMemory::CShareMemory(const char* pszMapName, int nFileSize, BOOL bServer):m_hFileMap(NULL),m_pBuffer(NULL)
{
if (bServer) //是服務(wù)端,就創(chuàng)建
{
m_hFileMap = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_EXECUTE_READWRITE, 0, nFileSize, pszMapName);
}
else //否則就打開
{
m_hFileMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, pszMapName);
}
//把它映射到內(nèi)存
m_pBuffer = ::MapViewOfFile(m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
}
CShareMemory::~CShareMemory(void)
{
::UnmapViewOfFile(m_pBuffer);
::CloseHandle(m_hFileMap);
}
ShareMemory.h頭文件如下:
#include <Windows.h>
class CShareMemory
{
public:
CShareMemory(const char* pszMapName, int nFileSize=0, BOOL bServer=FALSE);
~CShareMemory(void);
//屬性
LPVOID GetBuffer() const
{
return m_pBuffer;
}
//實(shí)現(xiàn)
private:
HANDLE m_hFileMap;
LPVOID m_pBuffer;
};
使用時(shí)用法如下:
服務(wù)端:
int main(int argc, char *argv[])
{
//進(jìn)程間內(nèi)存共享
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;
}
客戶端:
int main(int argc, char *argv[])
{
//進(jìn)程間內(nèi)存共享
LPCTSTR lpName= "hello";
LPCTSTR lpContent = "123456";
CShareMemory* pShareMemory = new CShareMemory(lpName, 20, FALSE);
printf("%s\n",(char*)pShareMemory->GetBuffer());
getchar();
return 0;
}
希望本文所述對(duì)大家的C++程序設(shè)計(jì)有所幫助。
相關(guān)文章
C語(yǔ)言中等待socket連接和對(duì)socket定位的方法
這篇文章主要介紹了C語(yǔ)言中等待socket連接和對(duì)socket定位的方法,分別為listen()函數(shù)和bind()函數(shù)的用法,需要的朋友可以參考下2015-09-09
C語(yǔ)言實(shí)現(xiàn)樹的動(dòng)態(tài)查找實(shí)例代碼
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)樹的動(dòng)態(tài)查找實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-06-06
C語(yǔ)言實(shí)現(xiàn)二叉樹遍歷的迭代算法
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)二叉樹遍歷的迭代算法,包括二叉樹的中序遍歷、先序遍歷及后序遍歷等,是非常經(jīng)典的算法,需要的朋友可以參考下2014-09-09
C++多態(tài)與虛擬之C++編譯器對(duì)函數(shù)名的改編(Name?Mangling)
在Windows?DLLs中,使用C++編寫的DllMain()等callback函數(shù)需避免C++編譯器進(jìn)行name?mangling,因此需使用extern?"C",這篇文章主要介紹了C++多態(tài)與虛擬:C++編譯器對(duì)函數(shù)名的改編(Name?Mangling),需要的朋友可以參考下2024-04-04
Qt?Creator配置opencv環(huán)境的全過(guò)程記錄
最近在PC端QT下配置opencv,想著以后應(yīng)該會(huì)用到,索性記錄下,這篇文章主要給大家介紹了關(guān)于Qt?Creator配置opencv環(huán)境的相關(guān)資料,需要的朋友可以參考下2022-05-05
C語(yǔ)言學(xué)習(xí)之鏈表的實(shí)現(xiàn)詳解
鏈表是一種物理存儲(chǔ)結(jié)構(gòu)上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表中的指針鏈接次序?qū)崿F(xiàn)的。這篇文章主要介紹了C語(yǔ)言中鏈表的實(shí)現(xiàn),需要的可以參考一下2022-11-11
C語(yǔ)言實(shí)現(xiàn)輸入兩個(gè)數(shù)字將其按從小到大輸出的方法
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)輸入兩個(gè)數(shù)字將其按從小到大輸出的方法,本文通過(guò)代碼講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
C++右值引用與move和forward函數(shù)的使用詳解
為了支持移動(dòng)操作,新標(biāo)準(zhǔn)引入了一種新的引用類型——右值引用(rvalue reference)。所謂右值引用就是必須綁定到右值的引用,這篇文章主要介紹了C++右值引用與move和forward的使用2022-08-08
美化你的代碼 vb(VBS)代碼格式化的實(shí)現(xiàn)代碼
雖然VB.NET出現(xiàn)很久了,但還有好多人仍然在使用VB6。我在實(shí)現(xiàn)一些小功能的時(shí)候也喜歡用VB6,畢竟誰(shuí)都不想每天的美好心情被VS那烏龜般的啟動(dòng)速度影響2012-05-05

