进程间通信共享内存文档格式.docx
- 文档编号:19729015
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:29
- 大小:21KB
进程间通信共享内存文档格式.docx
《进程间通信共享内存文档格式.docx》由会员分享,可在线阅读,更多相关《进程间通信共享内存文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
interfacefortheCFFMClass.
//
//////////////////////////////////////////////////////////////////////
#ifndefFZD_FFMCLASS_H
#defineFZD_FFMCLASS_H
//#include<
Winbase.h>
#include<
aclapi.h>
//Macrodefinition
//以下為共享內存定義
#defineDEFAULT_FILENAMENULL//默認的文件名
#defineDEFAULT_MAPNAME"
Local//_FZD_MAP_"
//默認的共享內存名
#defineDEFAULT_MAPSIZE(0xFFFF+1)//默認的共享內存大小
constDWORDNETRGUSER_CFM_CODE=0x1211DBFF;
//校驗碼,用於命令數據
constDWORDNETRGUSER_CMD_NONE=0;
//初始化指令碼,無指令
//以下為錯誤碼定義
#defineERROR_LEN256//錯誤描述長度
#defineERROR_INVALID_CMDCODE0xE00001FF//已經存在完全一樣的共享內存
#defineERROR_NO_MAPFILE0xE00002FF//未分配共享內存文件
#defineERROR_INVALID_CFMCODE0xE00003FF//校驗碼不匹配
//內存文件格式定義
#pragmapack
(1)
//用於存儲命令數據的內存文件格式
typedefstruct_tagDATA_HEADER
{
DWORDdwConfirmCode;
//校驗碼
DWORDnCommandCode;
//指令識別碼
DWORDdwDataSize;
//數據的大小
BYTEdwReserved[19];
//保留
BYTEbInfo[1];
//數據起始地址
_tagDATA_HEADER()
{
dwConfirmCode=NETRGUSER_CFM_CODE;
nCommandCode=NETRGUSER_CMD_NONE;
dwDataSize=0;
ZeroMemory(dwReserved,19);
ZeroMemory(bInfo,1);
}
}DATA_HEADER,*LPDATA_HEADER;
typedefDWORD(WINAPI*PSetEntriesInAcl)(ULONG,PEXPLICIT_ACCESS,PACL,PACL*);
//用於存儲應答數據的共享內存文件格式(暫不用)
typedefstruct_tagANS_HEADER
}ANS_HEADER,*LPANS_HEADER;
#pragmapack()
//類定義,共享內存服務端
classCFFMServer
public:
CFFMServer();
virtual~CFFMServer();
CFFMServer(char*szFileName,char*szMapName,DWORDdwSize);
protected:
PSetEntriesInAclm_fnpSetEntriesInAcl;
HANDLEm_hFile;
//映射文件句柄
HANDLEm_hFileMap;
//內存文件句柄
LPVOIDm_lpFileMapBuffer;
//緩衝區指針
char*m_pFileName;
//映射文件名
char*m_pMapName;
//內存文件名
DWORDm_dwSize;
//緩衝區大小
BOOLm_bCreateFlag;
//是否已創建共享內存
DWORDm_dwLastError;
//錯誤代碼
private:
void_Init();
//初始化參數
BOOL_IsWinNTLater();
//判斷當前操作系統
BOOLCreate(char*szFileName=DEFAULT_FILENAME,
char*szMapName=DEFAULT_MAPNAME,
DWORDdwSize=DEFAULT_MAPSIZE);
//新建共享內存
LPVOIDGetBuffer();
//獲取內存文件指針
DWORDGetSize();
//獲取內存文件大小
voidDestory();
//銷毀已有的共享內存
BOOLWriteCmdData(//寫入命令數據
DWORDnCommandCode,
DWORDdwDataSize,
constLPVOIDpBuf);
};
//類定義,共享內存客戶端
classCFFMClient
CFFMClient();
virtual~CFFMClient();
CFFMClient(DWORDdwAccess,char*szMapName,DWORDdwSize);
//內存文件指針
BOOLm_bOpenFlag;
//是否已經打開了一個內存文件
BOOLOpen(DWORDdwAccess=FILE_MAP_READ|FILE_MAP_WRITE,
DWORDdwSize=0);
//打開一個內存文件
//獲取當前內存文件的指針
//關閉當前對內存文件的訪問
BOOLGetCmdDataSize(DWORD*pDataSize);
//讀取命令數據大小
BOOLReadCmdData(//讀取命令數據
DWORDdwCommandCode,
DWORDdwBufSize,
LPVOIDpOutBuf);
DWORDmemSize,
#endif//FZD_FFMCLASS_H
/******************************************************************
FFMClass.h
共享內存類
---------------------------------------------------------------
FeiZhaoDong
00
1.1
45
*******************************************************************/
interfacefortheCFFMClass.
//
//////////////////////////////////////////////////////////////////////
#ifndefFZD_FFMCLASS_H
#defineFZD_FFMCLASS_H
//Macrodefinition
//以下為共享內存定義
#defineDEFAULT_FILENAMENULL//默認的文件名
//默認的共享內存名
#defineDEFAULT_MAPSIZE(0xFFFF+1)//默認的共享內存大小
//校驗碼,用於命令數據
//初始化指令碼,無指令
//以下為錯誤碼定義
#defineERROR_LEN256//錯誤描述長度
#defineERROR_INVALID_CMDCODE0xE00001FF//已經存在完全一樣的共享內存
#defineERROR_NO_MAPFILE0xE00002FF//未分配共享內存文件
#defineERROR_INVALID_CFMCODE0xE00003FF//校驗碼不匹配
//內存文件格式定義
#pragmapack
(1)
//用於存儲命令數據的內存文件格式
typedefstruct_tagDATA_HEADER
{
//校驗碼
//指令識別碼
//數據的大小
//保留
//數據起始地址
_tagDATA_HEADER()
{
dwConfirmCode=NETRGUSER_CFM_CODE;
nCommandCode=NETRGUSER_CMD_NONE;
dwDataSize=0;
ZeroMemory(dwReserved,19);
ZeroMemory(bInfo,1);
}
//用於存儲應答數據的共享內存文件格式(暫不用)
typedefstruct_tagANS_HEADER
#pragmapack()
//類定義,共享內存服務端
//映射文件句柄
//內存文件句柄
//緩衝區指針
//映射文件名
//內存文件名
//緩衝區大小
//是否已創建共享內存
//錯誤代碼
//初始化參數
//判斷當前操作系統
BOOLCreate(char*szFileName=DEFAULT_FILENAME,
char*szMapName=DEFAULT_MAPNAME,
DWORDdwSize=DEFAULT_MAPSIZE);
//新建共享內存
//獲取內存文件指針
//獲取內存文件大小
//銷毀已有的共享內存
BOOLWriteCmdData(//寫入命令數據
DWORDnCommandCode,
DWORDdwDataSize,
constLPVOIDpBuf);
//類定義,共享內存客戶端
//內存文件指針
//是否已經打開了一個內存文件
BOOLOpen(DWORDdwAccess=FILE_MAP_READ|FILE_MAP_WRITE,
DWORDdwSize=0);
//打開一個內存文件
//獲取當前內存文件的指針
//關閉當前對內存文件的訪問
//讀取命令數據大小
BOOLReadCmdData(//讀取命令數據
DWORDdwCommandCode,
DWORDdwBufSize,
LPVOIDpOutBuf);
DWORDmemSize,
#endif//FZD_FFMCLASS_H
实现文件:
FFMClass.cpp
1.0
2004/3/29下午02:
//FFMClass.cpp:
implementationoftheCFFMClass.
#include"
stdafx.h"
FFMClass.h"
windows.h>
lmerr.h>
stdio.h>
//CFFMServer
CFFMServer:
:
CFFMServer()
m_dwLastError=0;
m_fnpSetEntriesInAcl=NULL;
_Init();
}
~CFFMServer()
Destory();
CFFMServer(char*szFileName,char*szMapName,DWORDdwSize)
//以自定義設置創建共享內存塊
Create(szFileName,szMapName,dwSize);
//初始化各個參數
voidCFFMServer:
_Init()
m_hFile=NULL;
m_hFileMap=NULL;
m_lpFileMapBuffer=NULL;
m_pFileName=NULL;
m_pMapName=NULL;
m_dwSize=0;
m_bCreateFlag=FALSE;
//判斷是否NT4.0以上操作系統
BOOLCFFMServer:
_IsWinNTLater()
OSVERSIONINFOVer;
BOOLbAbleVersion=FALSE;
Ver.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
if(GetVersionEx(&
Ver))
if(Ver.dwPlatformId==VER_PLATFORM_WIN32_NT
&
&
Ver.dwMajorVersion>
=4)
bAbleVersion=TRUE;
else
m_dwLastError=GetLastError();
returnbAbleVersion;
//釋放當前共享內存,並重新初始化參數
Destory()
if(m_lpFileMapBuffer!
=NULL)
UnmapViewOfFile(m_lpFileMapBuffer);
if(m_hFileMap!
CloseHandle(m_hFileMap);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 通信 共享 内存