客户机从服务器机上接收过来BMP文件,然后显示出来
要求接收模块和显示模块通过内存通信来实现,请问具体应该怎么做?如何对内存操作?

解决方案 »

  1.   

    可用StretchDIBits显示图像:LPBITMAPINFOHEADER lpImgData;
    CopyMemory(lpImgData,char* s,size z);
    int bSuccess = ::StretchDIBits(pDC->m_hDC,                          // hDC
       lpDCRect->left,                 // DestX
       lpDCRect->top,                  // DestY
       lpDCRect->right-lpDCRect->left,            // nDestWidth
       lpDCRect->bottom-lpDCRect->top,           // nDestHeight
       lpDIBRect->left,                // SrcX
       lpDIBRect->top,                 // SrcY
       lpDIBRect->right-lpDIBRect->left,           // wSrcWidth
       lpDIBRect->bottom-lpDIBRect->top,          // wSrcHeight
       lpImgData,                      // lpBits
       (LPBITMAPINFO)lpImgData,         // lpBitsInfo
       DIB_RGB_COLORS,                 // wUsage
       SRCCOPY);                       // dwROP
    }
    //LPBITMAPINFOHEADER lpImgData;lpImgData是图像数据的指针,数据操作:
    CopyMemory(lpImgData,char* s,size z);//s: 数据源,z:数据长度
      

  2.   

    我的理解:你要解决的是如何通信,
    而不是接收和显示细节,进程间通信可以通过管道,
    或者邮件槽,邮件槽没用过.具体你可以参考
    <<win2k网络编程>>;
      

  3.   

    用内存映射文件,这里有一个例子:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/storage_64jd.asp
      

  4.   

    这个问题我想你是把通信和显示两个功能都混在一起考虑了,所以显得不知如何下手,其实,你可以建立一个用于专门用于通讯的对象,该对象仅用于通讯,当它收到对方机器发来的BMP数据,当一个BMP文件数据全部收到后,该对象便可以分配一个内存块,所BMP文件数据填入其中,再发消息通知显示窗口,这样,不是可以实现吗?
      

  5.   

    StretchDIBits显示图像这个可以解决你的问题lpData就是内存数据你试试看
      

  6.   

    使用CreateMemfile
    CreateFileMap
    ............
    ??具体请参考
    内存文件可以共享的。
      

  7.   

    A程序访问B程序内存空间可以使用以下方法:
    首先B程序通过发消息的方式将进程ID dwProcessID和一个数据指针发给A,
    A中根据dwProcessID得到B进程HANDLE后用ReadProcessMemory可以访问B
    程序的内存空间了
      

  8.   

    you can creat two processes and two processes access the same memory area,but you must set a lock for that area ,that lock is prevent the memory rewrite befor you load it.that lock like the system's PV operation.