我想把在一个进程中获得的想信息以文件映射的方式传递到另外一个进程中进行处理,如何实现?最好能给出相关代码,谢谢

解决方案 »

  1.   

    提炼下下面说明创建一个名为MySharedMem的长度为4096字节的有名映射文件:
    HANDLE hMySharedMapFile=CreateFileMapping((HANDLE)0xFFFFFFFF),
    NULL,PAGE_READWRITE,0,0x1000,"MySharedMem");
    并映射缓存区视图:
    LPSTR pszMySharedMapView=(LPSTR)MapViewOfFile(hMySharedMapFile,
    FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);其他进程访问共享对象,需要获得对象名并调用OpenFileMapping函数。
    HANDLE hMySharedMapFile=OpenFileMapping(FILE_MAP_WRITE,
    FALSE,"MySharedMem");一旦其他进程获得映射对象的句柄,可以象创建进程那样调用MapViewOfFile函数来映射对象视图。用户可以使用该对象视图来进行数据读写操作,以达到数据通讯的目的。当用户进程结束使用共享内存后,调用UnmapViewOfFile函数以取消其地址空间内的视图:
    if (!UnmapViewOfFile(pszMySharedMapView))
    {          AfxMessageBox("could not unmap view of file"); }
      

  2.   

    这个图像信息是什么?
    如果是handle可以用
    BOOL DuplicateHandle(
      HANDLE hSourceProcessHandle,
      HANDLE hSourceHandle,
      HANDLE hTargetProcessHandle,
      LPHANDLE lpTargetHandle,
      DWORD dwDesiredAccess,
      BOOL bInheritHandle,
      DWORD dwOptions
    );
    直接复制handle
    如果是二进制数据,WM_COPYDATA或者
    CreateFileMapping OpenFileMapping
      

  3.   

    我以CreateFileMapping OpenFileMapping方式传递图像的信息:
    一个BITMAP结构以及结构里面bmBits指针指向的数据
    请问进程之间运用这种方式能够传递指针吗?如果能够传递,怎么传的?
    再就是BITMAP结构里面bmBits指向的数据该怎么样传递?谢谢大家的关注
      

  4.   

    getdibits得到图片数据,同时把hbitmap的数据写人一段地址.
    然后用wm_copydata来发送消息到其他的进程里.
      

  5.   


    我建议你创建共享文件以后,先构造一个BITMAPFILEHEADER写到你的共享文件里面,共14字节。
    然后填写BITMAPINFOHEADER,也顺序写进去,40字节。如果没有调色板了,接下来就直接写你的bmBits指向的数据。用memcpy传过去就可以。共享文件用bmp做扩展名,这样你可以在另一个进程用这些图像数据。也可以在共享文件关闭以后,得到一个标准的bmp文件,这样你就可以在任何地方使用了。