CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

我倒! WM_COPYDATA进程通信的问题,大家进来看看,挺有意思的!!我再倒...请教

楼主rageliu(天气好了就去长白山看水怪去了,嘿嘿...)2006-01-09 17:42:58 在 VC/MFC / 基础类 提问

A进程给B进程发送WM_COPYDATA消息,B中消息处理有疑问!!  
  A中:  
  int   i   =   1;//这里初始化i为1  
  CString     str;  
  str.Format(_T("无法打开源文件:%d"),i);//注意这里有中文,冒号是英文形式的  
  COPYDATASTRUCT   m_copyDATA;//COPYDATA结构  
  m_copyDATA.cbData   =   str.GetLength();//str.GetLength()的值是16  
  m_copyDATA.lpData   =   str.GetBuffer(0);//取指针  
  ::SendMessage(m_hWnd,WM_COPYDATA,NULL,(LPARAM)&m_copyDATA);//m_hWnd是进程B的句柄  
   
  B中的处理(就处理WM_COPYDATA消息的部分,这里有疑问):  
  if(WM_COPYDATA   ==   message)  
  {  
        COPYDATASTRUCT   *p   =   NULL   ;  
        p   =   (COPYDATASTRUCT*)lParam;//对应结构的转换  
        CString   strTemp;  
        memcpy(strTemp.GetBuffer(0),p->lpData,p->cbData);//这里p->cbData还是16,我怀疑这  
                                                                                                                                                              //里strTemp.GetBuffer(0)参数不对  
        AfxMessageBox(strTemp);//显示"无法打开源文件:1satltemp.h",多了“satltemp.h”                             @1为什么???  
        int   Len   =   strTemp.GetLength();//Len居然是0,     @2   memcpy()对字符串指针的操作起了什么作用????  
  }  
  将其改成如下这样就正常:  
  if(WM_COPYDATA   ==   message)  
  {  
        COPYDATASTRUCT   *p   =   NULL   ;  
        p   =   (COPYDATASTRUCT*)lParam;  
        CString   strTemp;  
        char   str[MAX_PATH];  
        memcpy(str,p->lpData,p->cbData);  
        strTemp   =   str;  
        strTemp   =   strTemp.Left(p->cbData);  
        AfxMessageBox(strTemp);//显示"无法打开源文件:1",没有多出内容  
        int   Len   =   strTemp.GetLength();//这里也得到正常值  
  }  
   
   
  2个加@的地方请大家解答一下,@1的地方是不是和中英文有关?不过好象全英文也有这个问题 问题点数:200、回复次数:3Top

1 楼rageliu(天气好了就去长白山看水怪去了,嘿嘿...)回复于 2006-01-09 17:46:02 得分 0

为了说明问题,上面m_hWnd变量,没有用ReleaseBuffer()等问题请别在意Top

2 楼pkrobbie(pkrobbie)回复于 2006-01-09 17:53:36 得分 200

B中的处理(就处理WM_COPYDATA消息的部分,这里有疑问):  
  if(WM_COPYDATA   ==   message)  
  {  
        COPYDATASTRUCT   *p   =   NULL   ;  
        p   =   (COPYDATASTRUCT*)lParam;//对应结构的转换  
        CString   strTemp;  
        memcpy(strTemp.GetBuffer(p->cbData+1),p->lpData,p->cbData);  
                                                        ^^^^^^^^^^^^^  
   
  //这里p->cbData还是16,我怀疑这  
                                                                                                                                                              //里strTemp.GetBuffer(0)参数不对  
        AfxMessageBox(strTemp);//显示"无法打开源文件:1satltemp.h",多了“satltemp.h”                             @1为什么???  
        int   Len   =   strTemp.GetLength();//Len居然是0,     @2   memcpy()对字符串指针的操作起了什么作用????  
   
  新的CString中buffer长度为0;GetBuffer如果指定长度,CString负责分配一段不小于size的内存。memcpy只是copy内存,不会增加CStirng内容的长度。  
  Top

3 楼rageliu(天气好了就去长白山看水怪去了,嘿嘿...)回复于 2006-01-09 17:59:09 得分 0

郁闷!!!!拷贝过来就忘了改!!!!!!!!  
   
  气死我·#¥#%……%—……*……¥—*……%—(—*()*  
   
  ·#¥……%¥……%¥……—%—……*……—*  
  Top

相关问题

  • 如何用WM_COPYDATA在进程间交换数据
  • 如何使用WM_COPYDATA消息在两个进程间传递数据?
  • 请问用wm_copydata消息如何在进程间传递数据?
  • 在C#中如何实现进程间的通讯,比如wm_copydata消息
  • 请问如何用WM_COPYDATA消息在两个进程间传递结构体数据
  • 关于WM_COPYDATA
  • seedundersnow 有意思……
  • Sizeof有意思
  • 有意思~~
  • WM_COPYDATA的问题

关键词

  • 指针
  • 消息
  • 结构
  • null
  • copydata
  • strtemp
  • cbdata
  • copydatastruct
  • satltemp
  • 进程

得分解答快速导航

  • 帖主:rageliu
  • pkrobbie

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo