winodws平台C++共享内存实现
来源:互联网 发布:python 迭代器的使用 编辑:程序博客网 时间:2024/06/01 08:07
目录(?)[-]
- 服务端实现ShareMemServerh
- 服务端实现ShareMemServercpp
- 客户端实现ShareMemClienth
- 客户端实现ShareMemClientcpp
工作中用到本地程序与浏览器插件之间共享数据的需求,因此想到了使用内存共享的方法。
使用平台:windows
使用说明:内存共享分为服务端和客户端,服务端写入数据,客户端读取数据,服务端和客户端通过使用相同的名字,来确认配对。
服务端实现:ShareMemServer.h
- #pragma once
- /**************************************************************************************************
- 功能:共享内存服务端
- 作用:
- 用法:
- CShareMemServer m_shareMem;
- void* pShareMem = m_shareMem.GetAddr();
- 共享内存名例子
- #define SHARE_MEM_NAME ( L"12345578-0B4B-4e9f-AAA4-19D29CC9416A" )
- #define SHARE_MEM_NAME ( L"12345578-0B4B-4e9f-AAA4-19D29CC9416A-1" )
- #define SHARE_MEM_NAME ( L"12345578-0B4B-4e9f-AAA4-19D29CC9416A-2" )
- #define SHARE_MEM_NAME ( L"12345578-0B4B-4e9f-AAA4-19D29CC9416A-3" )
- **************************************************************************************************/
- #include <Windows.h>
- #include <string>
- using namespace std;
- class CShareMemServer
- {
- public:
- CShareMemServer(int iShareMemSize, wchar_t* pShareMemName);
- ~CShareMemServer(void);
- void* GetAddr(); //获取共享内存地址
- private:
- int m_iShareMemSize;
- wstring m_strShareMemName;
- HANDLE m_hMapFile;
- LPVOID m_lpMapAddress; //共享内存地址
- };
服务端实现:ShareMemServer.cpp
- #include ".\ShareMemServer.h"
- CShareMemServer::CShareMemServer(int iShareMemSize, wchar_t* pShareMemName)
- : m_iShareMemSize(iShareMemSize)
- , m_strShareMemName(pShareMemName)
- , m_lpMapAddress(NULL)
- , m_hMapFile(NULL)
- {
- }
- CShareMemServer::~CShareMemServer(void)
- {
- if ( m_lpMapAddress )
- {
- UnmapViewOfFile( m_lpMapAddress );
- m_lpMapAddress = NULL;
- }
- if ( m_hMapFile )
- {
- CloseHandle( m_hMapFile );
- m_hMapFile = NULL;
- }
- }
- void* CShareMemServer::GetAddr()
- {
- if ( NULL == m_lpMapAddress )
- {
- if ( NULL == m_hMapFile )
- {
- m_hMapFile = CreateFileMappingW( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, m_iShareMemSize, m_strShareMemName.c_str() );
- }
- if (m_hMapFile)
- {
- m_lpMapAddress = MapViewOfFile( m_hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0 );
- }
- }
- return m_lpMapAddress;
- }
客户端实现:ShareMemClient.h
- #pragma once
- /**************************************************************************************************
- 功能:共享内存客户端
- 作用:
- 1、获取共享内存地址
- 用法:
- CShareMemClient m_VideoData(VIDEO_SOURCE_SHARE_MEM_NAME)
- void* pShareMem = m_VideoData.GetAddr();
- **************************************************************************************************/
- #include <Windows.h>
- #include <string>
- using namespace std;
- class CShareMemClient
- {
- public:
- CShareMemClient(wchar_t* pShareMemName);
- ~CShareMemClient(void);
- void* GetAddr(); //获取共享内存地址
- private:
- int m_iShareMemSize;
- wstring m_strShareMemName;
- HANDLE m_hMapFile;
- LPVOID m_lpMapAddress; //共享内存地址
- };
客户端实现:ShareMemClient.cpp
- #include ".\ShareMemClient.h"
- CShareMemClient::CShareMemClient(wchar_t* pShareMemName)
- : m_strShareMemName(pShareMemName)
- , m_lpMapAddress(NULL)
- , m_hMapFile(NULL)
- {
- }
- CShareMemClient::~CShareMemClient(void)
- {
- if ( m_lpMapAddress )
- {
- UnmapViewOfFile( m_lpMapAddress );
- m_lpMapAddress = NULL;
- }
- if ( m_hMapFile )
- {
- CloseHandle( m_hMapFile );
- m_hMapFile = NULL;
- }
- }
- void* CShareMemClient::GetAddr()
- {
- if ( NULL == m_lpMapAddress )
- {
- if ( NULL == m_hMapFile )
- {
- m_hMapFile = OpenFileMappingW( FILE_MAP_ALL_ACCESS, false, m_strShareMemName.c_str() );
- }
- if (m_hMapFile)
- {
- m_lpMapAddress = MapViewOfFile( m_hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0 );
- }
- }
- return m_lpMapAddress;
- }
资源下载:http://download.csdn.net/detail/shishuo365/4858832
转载请注明来自Master.R(石硕)的CSDN博客:blog.csdn.net/shishuo365 如有疑问请发邮件shishuo365#126.com(将#更换为@)
0 0
- winodws平台C++共享内存实现
- winodws平台C++共享内存实现
- 共享内存在winodws操作系统下的使用
- 共享内存在winodws操作系统下的使用
- win平台C语言共享内存通信
- 各平台共享内存的实现方式
- winodws内存管理机制1
- C语言 共享内存
- C linux 共享内存
- c内存共享
- Linux挂载Winodws共享文件夹【转】
- 【C++】使用共享内存实现进程间通信
- C 共享内存 实现写入字符串,读出大写字符串
- linux c之使用共享内存实现进程间通信
- nginx共享内存:共享内存的实现
- java实现共享内存
- php共享内存实现
- VC 实现共享内存
- swift 闭包
- 【好】电路常识性概念三--TTL与CMOS电平 / OC门
- 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM
- Android SQLite数据存储的通用设计
- spring配置文件详解--真的蛮详细
- winodws平台C++共享内存实现
- 数据库应用-XML数据存储(Speicherung von XML Daten)-1
- PSO DE EA算法的不同及相同之处。
- 腾讯微信技术架构
- 数据结构基本查找算法
- 代理模式(四):代理模式效果与适用场景
- Python 多线程
- ROS:定制自己的消息类型msg
- web前端开发学习路线