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

📄 filemapping.cpp

📁 这是一个软件水平资格考试中使用的CASL汇编语言的编译器,实现文件中包括一个编译器,一个虚拟机,一个类似于Debug的调试器.
💻 CPP
字号:
// FileMapping.cpp: implementation of the CFileMapping class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FileMapping.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CFileMapping::CFileMapping()
{
  m_hFile = INVALID_HANDLE_VALUE;
  m_hMapFile = NULL;
  m_lpData = NULL;

}

CFileMapping::~CFileMapping()
{
  if (m_lpData != NULL)
  {
    UnmapViewOfFile(m_lpData);
  }
  if (m_hMapFile != NULL)
  {
    CloseHandle(m_hMapFile);
  }
  if (m_hFile != INVALID_HANDLE_VALUE)
  {
    CloseHandle(m_hFile);
  }
} 


/////////////////////////////////////////////////////////////////////////
//函数名称:LoadFile
//函数功能:------将指定文件映射入内存中--------
//入口参数:const char * argFileName----------要映射入内存的文件名
//出口参数:无
//返回值:int-----------FILE_MAP_OK表示操作成功,FILE_MAP_FAILED表示操作失败
//开发人员:杨军
//开发日期:2004-5-5
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CFileMapping::LoadFile(const char * argFileName)
{
  DWORD dwAttribute = GetFileAttributes(argFileName);
  if (0xFFFFFFFF == dwAttribute)
  {
    goto LoadFile_Failed;
  }
  //将文件的属性设为档案类型以便于处理
  SetFileAttributes(argFileName, FILE_ATTRIBUTE_ARCHIVE);
  m_hFile = CreateFile(argFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);
  //恢复文件的属性
  SetFileAttributes(argFileName, dwAttribute);
  if (INVALID_HANDLE_VALUE == m_hFile)
  {
    goto LoadFile_Failed;
  }

  //获得文件的大小
  m_dwSize = GetFileSize(m_hFile, NULL);
  if (0xFFFFFFFF == m_dwSize)
  {
    goto LoadFile_Opened_Failed;
  }
  
  //创建文件句柄映射对象的句柄
  m_hMapFile = CreateFileMapping(m_hFile, NULL, PAGE_READONLY, 0, 0, NULL);
  if (NULL == m_hMapFile)
  {
    goto LoadFile_Opened_Failed;
  }

  //将映射击对象所指向的文件映射入内存
  m_lpData = MapViewOfFile(m_hMapFile, FILE_MAP_READ, 0, 0, 0);
  if (NULL == m_lpData)
  {
    goto LoadFile_Mapped_Failed;
  }

  return FILE_MAP_OK;

LoadFile_Mapped_Failed:
  CloseHandle(m_hMapFile);
LoadFile_Opened_Failed:
  CloseHandle(m_hFile);
LoadFile_Failed:
  return FILE_MAP_FAILED;
}


/////////////////////////////////////////////////////////////////////////
//函数名称:UnloadFile
//函数功能:------将映射到内存中的文件卸去------
//入口参数:无
//出口参数:无
//返回值:int-----------FILE_MAP_OK表示操作成功,FILE_MAP_FAILED表示操作失败
//开发人员:杨军
//开发日期:2004-5-5
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CFileMapping::UnloadFile()
{
  UnmapViewOfFile(m_lpData);
  CloseHandle(m_hMapFile);
  CloseHandle(m_hFile);
   
  m_lpData = NULL;
  m_hMapFile = NULL;
  m_hFile = INVALID_HANDLE_VALUE;
  return FILE_MAP_OK;
}

/////////////////////////////////////////////////////////////////////////
//函数名称:GetMapFileBase
//函数功能:------获得文件映射到内存中的起始地址---
//入口参数:无
//出口参数:无
//返回值:非NULL表示实际的起始地址,NULL的话表示当前没有成功映射文件!
//开发人员:杨军
//开发日期:2004-5-5
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
LPVOID CFileMapping::GetMapFileBase()
{
  return m_lpData;
}

/////////////////////////////////////////////////////////////////////////
//函数名称:CreateSharedMapFile
//函数功能:------创建共享信息用的内存映射文件----
//入口参数:const char * argMapName-------要创建的映射文件名
//          unsigned int argSize----------共享区域的大小
//出口参数:无
//返回值:int-----------FILE_MAP_OK表示操作成功,FILE_MAP_FAILED表示操作失败
//开发人员:杨军
//开发日期:2004-5-11
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CFileMapping::CreateSharedMapFile(const char * argMapName, unsigned int argSize)
{
  m_hMapFile = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE, 0, argSize, argMapName);
  if (NULL == m_hMapFile)
  {
    goto CreateSharedMapFile_Failed;
  }
  //将映射对象映射入内存
  m_lpData = MapViewOfFile(m_hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  if (NULL == m_lpData)
  {
    goto CreateSharedMapFile_Mapped_Failed;
  }

  return FILE_MAP_OK;

CreateSharedMapFile_Mapped_Failed:
  CloseHandle(m_hMapFile);
CreateSharedMapFile_Failed:
  return FILE_MAP_FAILED;
}


/////////////////////////////////////////////////////////////////////////
//函数名称:CloseSharedMapFile
//函数功能:------关闭共享信息用的内存映射文件----
//入口参数:无
//出口参数:无
//返回值:int-----------FILE_MAP_OK表示操作成功,FILE_MAP_FAILED表示操作失败
//开发人员:杨军
//开发日期:2004-5-11
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CFileMapping::CloseSharedMapFile()
{
  ::UnmapViewOfFile(m_lpData);
  ::CloseHandle(m_hMapFile);
  m_lpData = NULL;
  m_hMapFile = NULL;
  m_hFile = INVALID_HANDLE_VALUE;

  return FILE_MAP_OK;
}

⌨️ 快捷键说明

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