服务器端:
HANDLE m_handle;
CString m_file;
char* m_str;
1.
m_handle=CreateFileMapping(
INVALID_HANDLE_VALUE,//创建共享内存
NULL,//默认安全属性
PAGE_READWRITE,//可读写
0,//最大对象空间
BUFSIZ,//缓冲大小
m_file);//映射对象名
2.
//将共享内存映射到服务器地址空间的视图
m_str=(char *)::MapViewOfFile(m_handle,
FILE_MAP_ALL_ACCESS,
0,0,BUFSIZ);
//通过系统的管理而将文件映射对象的全部或部分映射到进程地址空间
3.
UpdateData(TRUE);
::RtlCopyMemory((PVOID)m_str,m_Data.GetBuffer(0),m_Data.GetLength());//!!重点。如果是直接赋值有问题
m_Data.ReleaseBuffer();
//strTemp写入到m_pBuf。Rtl..Unicode。。。CopyMemory...memcpy
4.
if (m_pBuf != NULL)
{
::UnmapViewOfFile(m_pBuf);/////
//从进程的地址空间撤消文件数据的映像
m_pBuf=NULL;
}
if (m_hMapFile != NULL)
{
::CloseHandle(m_hMapFile);
m_hMapFile=NULL;
}
客户端:变量声明同理。。
1.
m_handle=::OpenFileMapping(
FILE_MAP_ALL_ACCESS,
FALSE,
m_file
);
2.
if (m_handle != NULL)
{
m_str=(char*)::MapViewOfFile(m_handle,
FILE_MAP_ALL_ACCESS,
0,0,BUFSIZ);
if (m_str != NULL)
{
m_Data=m_str;
UpdateData(FALSE);
}
}