Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数
Posted caimouse
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数相关的知识,希望对你有一定的参考价值。
在开发软件过程里,也经常碰到进程间共享数据的需求。比如
A
进程创建计算数据,
B
进程进行显示数据的图形。这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开发,加快软件的开发速度。下面就来使用文件映射的方式进行共享数据。先要使用函数
CreateFileMapping
来创建一个想共享的文件数据句柄,然后使用
MapViewOfFile
来获取共享的内存地址,然后使用
OpenFileMapping
函数在另一个进程里打开共享文件的名称,这样就可以实现不同的进程共享数据。
函数
CreateFileMapping
、
MapViewOfFile
声明如下:
WINBASEAPI
__out
HANDLE
WINAPI
CreateFileMappingA(
__in HANDLE hFile,
__in_opt LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
__in DWORD flProtect,
__in DWORD dwMaximumSizeHigh,
__in DWORD dwMaximumSizeLow,
__in_opt LPCSTR lpName
);
WINBASEAPI
__out
HANDLE
WINAPI
CreateFileMappingW(
__in HANDLE hFile,
__in_opt LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
__in DWORD flProtect,
__in DWORD dwMaximumSizeHigh,
__in DWORD dwMaximumSizeLow,
__in_opt LPCWSTR lpName
);
#ifdef UNICODE
#define CreateFileMapping CreateFileMappingW
#else
#define CreateFileMapping CreateFileMappingA
#endif // !UNICODE
WINBASEAPI
__out
LPVOID
WINAPI
MapViewOfFile(
__in HANDLE hFileMappingObject,
__in DWORD dwDesiredAccess,
__in DWORD dwFileOffsetHigh,
__in DWORD dwFileOffsetLow,
__in SIZE_T dwNumberOfBytesToMap
);
hFile
是创建共享文件的句柄。
lpFileMappingAttributes
是文件共享的属性。
flProtect
是当文件映射时读写文件的属性。
dwMaximumSizeHigh
是文件共享的大小高位字节。
dwMaximumSizeLow
是文件共享的大小低位字节。
lpName
是共享文件对象名称。
hFileMappingObject
是共享文件对象。
dwDesiredAccess
是文件共享属性。
dwFileOffsetHigh
是文件共享区的偏移地址。
dwFileOffsetLow
是文件共享区的偏移地址。
dwNumberOfBytesToMap
是共享数据长度。
调用函数的例子如下:
#001 //
文件共享。
#002 //
蔡军生
2007/10/27 QQ:9073204
深圳
#003 void FileMapping(void)
#004 {
#005 //
打开共享的文件对象。
#006 m_hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,
#007 FALSE,_T("TestFileMap"));
#008 if (m_hMapFile)
#009 {
#010 //
显示共享的文件数据。
#011 LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS,
#012 0,0,0);
#013 OutputDebugString(lpMapAddr);
#014 }
#015 else
#016 {
#017 //
创建共享文件。
#018 m_hMapFile = CreateFileMapping( (HANDLE)0xFFFFFFFF,NULL,
#019 PAGE_READWRITE,0,1024,_T("TestFileMap"));
#020
#021 //
拷贝数据到共享文件里。
#022 LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS,
#023 0,0,0);
#024 std::wstring strTest(_T("TestFileMap"));
#025 wcscpy(lpMapAddr,strTest.c_str());
#026
#027 FlushViewOfFile(lpMapAddr,strTest.length()+1);
#028 }
#029 }
1. WiX安装工具的使用
2. 俄罗斯方块游戏开发
http://edu.csdn.net/course/detail/5110
3. boost库入门基础
http://edu.csdn.net/course/detail/5029
4.Arduino入门基础
http://edu.csdn.net/course/detail/4931
5.Unity5.x游戏基础入门
http://edu.csdn.net/course/detail/4810
6. TensorFlow API攻略
http://edu.csdn.net/course/detail/4495
7. TensorFlow入门基本教程
http://edu.csdn.net/course/detail/4369
8. C++标准模板库从入门到精通
http://edu.csdn.net/course/detail/3324
9.跟老菜鸟学C++
http://edu.csdn.net/course/detail/2901
10. 跟老菜鸟学python
http://edu.csdn.net/course/detail/2592
11. 在VC2015里学会使用tinyxml库
http://edu.csdn.net/course/detail/2590
12. 在Windows下SVN的版本管理与实战
http://edu.csdn.net/course/detail/2579
13.Visual Studio 2015开发C++程序的基本使用
http://edu.csdn.net/course/detail/2570
14.在VC2015里使用protobuf协议
http://edu.csdn.net/course/detail/2582
15.在VC2015里学会使用mysql数据库
http://edu.csdn.net/course/detail/2672
以上是关于Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数的主要内容,如果未能解决你的问题,请参考以下文章
Windows API一日一练 91 GetProcessMemoryInfo函数
Windows API一日一练 83 GetModuleFileName函数
Windows API一日一练 7 ShowWindow函数
Windows API一日一练 25 CreateSolidBrush函数
Windows API一日一练 5 RegisterClass和RegisterClassEx函数
Windows API一日一练 46 EnterCriticalSection和LeaveCriticalSection