之前自己做的一个项目涉及到进程间通信问题,我采用的是SOCKET方式。面试的时候有问过为什么不采用其他方式。好吧,其实发现共享内存更方便一点。于是自己写了一下,并且做了个测试界面。
写的程序可以在这里下载下载程序
程序启动会获得自身的窗口句柄,另外可以输入一个窗口句柄,用于进程间Windows消息通信。File Mapping Name实际上就是内核对象名,进程间依据这个来访问共享内存。
Windows下的共享内存实际是用文件映射实现的,可以用CreateFileMapping创建一个内存文件映射对象,用于映射文件到内存。该函数返回的是File Mapping Object句柄。
CreateFileMappingA(
__in HANDLE hFile,
__in_opt LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
__in DWORD flProtect,
__in DWORD dwMaximumSizeHigh,
__in DWORD dwMaximumSizeLow,
__in_opt LPCSTR lpName
);
1)因为并不需要创建一个实际的文件,所以把hFile设置成为0xFFFFFFFF(INVALID_HANDLE_VALUE)就行了。
2)Windows