⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sharedmemory.cpp

📁 决战帝王1.5武神降临对喜爱决战的玩家共享研究用
💻 CPP
字号:
// SharedMemory.cpp: implementation of the CSharedMemory class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SharedMemory.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSharedMemory::CSharedMemory()
{
	m_lpData	= NULL;
	m_hMapping	= NULL;
	m_nSize		= 0;
}

CSharedMemory::CSharedMemory(UINT nSize, LPCTSTR pszName)
{
	m_lpData	= NULL;
	m_hMapping	= NULL;
	m_nSize		= 0;

	if(!Create(nSize, pszName)) AfxThrowMemoryException();
}

CSharedMemory::~CSharedMemory()
{
	Delete();
}

BOOL CSharedMemory::Create (UINT nSize, LPCTSTR pszName)
{
	HANDLE hMapping = ::CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE,	0, nSize, pszName);
	if(hMapping == NULL || hMapping == INVALID_HANDLE_VALUE) return FALSE;

	LPVOID pVoid = ::MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0,	0);
	if(pVoid == NULL)
	{
		::CloseHandle(hMapping);
		return FALSE;
	}

	m_hMapping = hMapping;
	m_lpData = pVoid;
	m_nSize = nSize;

	return TRUE;
}

void CSharedMemory::Delete()
{
	if(m_lpData != NULL)
	{
		::FlushViewOfFile(m_lpData, 0);
		::UnmapViewOfFile(m_lpData);
		m_lpData = NULL;
	}
	
	if(m_hMapping != NULL)
	{
		::CloseHandle(m_hMapping);
		m_hMapping = NULL;
	}

	m_nSize	= 0;
}

BOOL CSharedMemory::Open(LPCTSTR szName, UINT nSize, BOOL bReadOnly)
{
	DWORD dwDesiredAccess = bReadOnly ? FILE_MAP_READ : FILE_MAP_WRITE;
	HANDLE hMapping = ::OpenFileMapping(dwDesiredAccess, 0, szName);

	if(hMapping == NULL)
	{
		TRACE(_T("Failed in call to OpenFileMapping, GetLastError returned %d\n"), GetLastError());
	    return FALSE;
	}

	LPVOID lpVoid = ::MapViewOfFile(hMapping, dwDesiredAccess, 0, 0, nSize);
	if(lpVoid == NULL)
	{
		TRACE(_T("Failed in call to MapViewOfFile, GetLastError returned %d\n"), GetLastError());
		::CloseHandle(hMapping);
		return FALSE;
	}

	m_hMapping = hMapping;
	m_lpData = lpVoid;

	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -