我在两个进程间通过创建文件映射的方式实现数据的传输,但是我要传输的是一个结构体,结构体定义如下:
typedef struct 
{
int x;
int y;
HDC p_hImageDC;
HBITMAP p_hBitmap;
}ImageMsg , *pImageMsg;请问我怎么样传输和接收数据啊?请大侠帮帮忙,谢谢!

解决方案 »

  1.   

    以下列方式貌似不行:
    hRecvMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 1000000, "DataMap");
    if (hRecvMap != NULL)
    {
    lpData = (pImageMsg)MapViewOfFile(hRecvMap, FILE_MAP_WRITE, 0, 0, 0);
    if (lpData == NULL)
    {
    CloseHandle(hRecvMap);
    hRecvMap = NULL;
    return FALSE;
    }
    }
    lpData->p_hBitmap=imageMsg.p_hBitmap;
    lpData->p_hImageDC=imageMsg.p_hImageDC;
    lpData->x=imageMsg.x;
    lpData->y=imageMsg.y;望大家指点!
      

  2.   

    WM_COPYDATE 可以进程间通信 传递结构体  你可以试试 
    我不太熟悉文件映射
      

  3.   

    CreateFileMapping是可以的,通过CreateFileMapping创建一个带有名字的内存映射文件,在另一个进程中通过OpenFileMapping打开这个内存映射文件,不过这个过程需要一个事件来通知对方读写,因为两个进程间并不知道对方什么时候读,什么时候写
      

  4.   

    WM_COPYDATA和文件映射都应该是不行的, WM_COPYDATA的原理其实就是系统在内部悄悄为你做文件映射, 两者是一会事。
    之所以说不行, 是因为结构体里面含有HDC, HBITMAP这样的东西, 相当于指针了, 通过文件映射, 指针再另一个进程有意义了, 但是指针指向的内存却没意义了,有点像浅拷贝, 哈, 不知道这不说的清楚。
    至于什么方法可行, 我也不知道啦,抱歉
      

  5.   

    学习了  不过应该是可以的  你可以用SendMessage   然后在目标程序中Copy一份数据  至少我在我的程序中是这么做的   局部变量会在这个作用域完了之后回消失掉 所以必须用SendMessage  不能用PostMessage
      

  6.   

    谢谢大家了 我现在是传递一个BITMAP对象过来,现在是想把这个对象写到一个内存DC中,怎么样可以实现?分数不够我再加