C++ processes share data encapsulated as class instances

  • 2020-04-02 02:51:42
  • OfStack

This article illustrates the C++ process Shared data encapsulation into a class method, sharing for your reference. Specific methods are as follows:

The source file for ShareMemory. CPP is as follows:

#include "ShareMemory.h"  
 
CShareMemory::CShareMemory(const    char* pszMapName, int nFileSize, BOOL bServer):m_hFileMap(NULL),m_pBuffer(NULL) 

    if (bServer) //Is the server, created & NBSP; < br / >     { 
        m_hFileMap = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_EXECUTE_READWRITE, 0, nFileSize, pszMapName); 
    } 
    else //Otherwise open & NBSP; < br / >     { 
        m_hFileMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, pszMapName); 
    } 
    //Map it to memory & NBSP; < br / >     m_pBuffer = ::MapViewOfFile(m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0); 

 
CShareMemory::~CShareMemory(void) 

    ::UnmapViewOfFile(m_pBuffer); 
    ::CloseHandle(m_hFileMap); 
}

The ShareMemory. H header file is as follows:

#pragma once  
#include <Windows.h> 
 
class CShareMemory 

public: 
    CShareMemory(const  char* pszMapName, int nFileSize=0, BOOL bServer=FALSE); 
    ~CShareMemory(void); 
    //Property & have spent < br / >     LPVOID GetBuffer() const  
    { 
        return m_pBuffer; 
    } 
 
    //Implement & have spent < br / > private: 
    HANDLE m_hFileMap; 
    LPVOID m_pBuffer; 
};

The usage is as follows:

Server:

#include "ShareMemory.h"  
int main(int argc, char *argv[]) 

 
    //Memory sharing between processes & NBSP; < br / >     LPCTSTR lpName= "hello"; 
    LPCTSTR lpContent = "123456"; 
    CShareMemory* pShareMemory = new CShareMemory(lpName, 20, FALSE); 
    LPVOID lpBase = pShareMemory->GetBuffer(); 
    strcpy((char*)lpBase, lpContent); 
     
    printf("%sn",(char*)pShareMemory->GetBuffer()); 
    getchar(); 
    return 0; 
}

Client:

#include "ShareMemory.h"  
int main(int argc, char *argv[]) 

 
    //Memory sharing between processes & NBSP; < br / >     LPCTSTR lpName= "hello"; 
    LPCTSTR lpContent = "123456"; 
    CShareMemory* pShareMemory = new CShareMemory(lpName, 20, FALSE); 
 
    printf("%sn",(char*)pShareMemory->GetBuffer()); 
    getchar(); 
    return 0; 
}

Hope that the article described in the C++ programming to help you.


Related articles: