memory.cpp

来自「一个国人自己实现图像库的程序(有参考价值)」· C++ 代码 · 共 78 行

CPP
78
字号
#include "stdafx.h"
#include "..\Include\C_Memory.h"

//===================================================================
void *  fooMallocSharedMemory (PCTSTR pName, int iBlkSize, HANDLE * hMapping)
{
	HANDLE		hFileMap ;
	void		* pMem = NULL ;
	if ((hMapping != NULL) && (pName != NULL))
	{
		hFileMap = ::CreateFileMapping (INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
										0, (DWORD)iBlkSize, pName) ;
		if (hFileMap != NULL)
			if (::GetLastError() == ERROR_ALREADY_EXISTS) // 已存在
				::CloseHandle (hFileMap) ;
			else // 不存在且创建
				pMem = (void *) ::MapViewOfFile (hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0) ;
		*hMapping = pMem ? hFileMap : NULL ;
	}
	return pMem ;
}
//===================================================================
BOOL  fooReadSharedMemory (PCTSTR pMemName, BYTE * pReceive, int iExpectBytes)
{
	BYTE		* pBase = NULL ;
	BOOL		bResult = FALSE ;
	HANDLE		hMap = NULL ;
	__try
	{
		if ((pReceive == NULL) || (pMemName == NULL))
			__leave ;
		hMap = ::OpenFileMapping (FILE_MAP_READ, FALSE, pMemName) ;
		if (hMap == NULL)
			__leave ;
		pBase = (BYTE *)::MapViewOfFile (hMap, FILE_MAP_READ, 0, 0, 0) ;
		if (pBase == NULL)
			__leave ;
		CopyMemory (pReceive, pBase, iExpectBytes) ;
		bResult = TRUE ;
	}
	__finally
	{
		if (pBase != NULL)
			::UnmapViewOfFile (pBase) ;
		if (hMap != NULL)
			::CloseHandle (hMap) ;
	}
	return bResult ;
}
//===================================================================
BOOL  fooWriteSharedMemory (PCTSTR pMemName, BYTE * pWrite, int iWriteBytes)
{
	BYTE		* pBase = NULL ;
	BOOL		bResult = FALSE ;
	HANDLE		hMap = NULL ;
	__try
	{
		if ((pWrite == NULL) || (pMemName == NULL))
			__leave ;
		hMap = ::OpenFileMapping (FILE_MAP_WRITE, FALSE, pMemName) ;
		if (hMap == NULL)
			__leave ;
		pBase = (BYTE *)::MapViewOfFile (hMap, FILE_MAP_WRITE, 0, 0, 0) ;
		if (pBase == NULL)
			__leave ;
		CopyMemory (pBase, pWrite, iWriteBytes) ;
		bResult = TRUE ;
	}
	__finally
	{
		if (pBase != NULL)
			::UnmapViewOfFile (pBase) ;
		if (hMap != NULL)
			::CloseHandle (hMap) ;
	}
	return bResult ;
}
//===================================================================

⌨️ 快捷键说明

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