我用如下代码传vector类型变量:
vector<char> v;
cds.dwData=0;
cds.cbData=sizeof(v);
cds.lpData=&v;
SendMessage(hWndFind[k],WM_COPYDATA,(WPARAM)hWnd,(LPARAM)&cds);为什么到了接收方收到的会是错误的值呢? 谢谢!

解决方案 »

  1.   

    COPYDATASTRUCT* cds = new COPYDATASTRUCT;
            cds->dwData = ((COPYDATASTRUCT*)Msg.LParam)->dwData;
            cds->cbData = ((COPYDATASTRUCT*)Msg.LParam)->cbData;
            cds->lpData = malloc(cds->cbData); 
            if (((COPYDATASTRUCT*)Msg.LParam)->lpData == NULL)
            {
                cds->lpData = NULL;
            }
            else
            {
                memcpy(cds->lpData, ((COPYDATASTRUCT*)Msg.LParam)->lpData, cds->cbData);
            }
            mqueueCDS.push(cds);        PostMessage(mhMsgWnd, WM_POST_HALL_MSG, NULL, NULL);
      

  2.   

    你的 vector<char> v;  是局部变量当消息传出后,局部变量生存期已过其它程序再访问时就出错修改你的变量存储方式
      

  3.   

    局部变量没有问题,因为SendMessage只有等到处理函数结束才会返回。我想可能是vector里面用到了指针,而COPYDATASTRUCT不能传指针
      

  4.   

    还是不行,是不是不能用vector的指针?
      

  5.   

    是啊,我的vector里面有指针,那怎么解决? 谢谢!
      

  6.   

    Windows传COPYDATASTRUCT数据时会在内存中开辟一共享区域用于存放该结构中指针所指内存,要是该内存数据中有指针,则该指针指的是发生者进程中的内存,所以接受者不能访问 可以用memcpy把内存拷出来.