原文地址:http://blog.163.com/guo_linda/blog/static/123773057201281851626664/
那么怎么样才能在32位的Windows系统中达到共享内存的目的呢?
把文件映像到内存,首先必须调用CreateFileMapping()函数,然后再调用MapViewOfFile函数,把文件视映像到进程地址空间上。
其他参数允许指定内存块的最大尺寸,如果内存块的尺寸比第一个参数中指定的文件尺寸还要大,这个文件就增大。
最后一个参数为内存映像对象指定名字,通过调用CreateFileMapping函数和OpenFileMapping函数,其他进程可用这个名字来访问相同的文件映像。
D:测试创建和打开文件映射的时候老是得到"句柄无效"的错误, 仔细看了MSDN以后才发觉是函数认识不透, 这里把相关的解释翻译出来
1) 物理文件句柄
任何可以获得的物理文件句柄, 如果你需要创建一个物理文件无关的内存映射也无妨, 将它设置成为 0xFFFFFFFF(INVALID_HANDLE_VALUE)就可以了.
如果需要和物理文件关联, 要确保你的物理文件创建的时候的访问模式和"保护设置"匹配, 比如: 物理文件只读, 内存映射需要读写就会发生错误. 推荐你的物理文件使用独占方式创建.
Windows 2000 or later:
如果 Terminal Services 没有运行 "Global" 和 "Local" 前缀的特殊含义就被忽略了
在创建文件映射对象后使用可以调用MapViewOfFile函数映射到本进程的地址空间内。
一旦其他进程获得映射对象的句柄,可以象创建进程那样调用MapViewOfFile函数来映射对象视图。用户可以使用该对象视图来进行数据读写操作,以达到数据通讯的目的。
当用户进程结束使用共享内存后,调用UnmapViewOfFile函数以取消其地址空间内的视图:
if (!UnmapViewOfFile(pszMySharedMapView))
{