主程序a:建立一个消息WM_MYMESS  对应的消息处理函数是 
OnMyMessEvent(WPARAM wParam, LPARAM lParam)
{
//处理
}
类b要使用消息传递方式要主程序来处理:BYTE *byTemp = new BYTE[MYLENGTH]
class b
{
    //对byTemp一些初始化,然后产生一个消息,叫OnMyMessEvent进一步处理    PostMessage(WM_MYMESS,(WPARAM) , (LPARAM) );
}现已经知道利用PostMessage中的WPARAM LPARAM来传递字符串的长度
但目的是怎么样把字符串内容也通过WPARAM LPARAM传递过去呢?思考结果:可以利用这两个参数将字符串的首地址传过去,然后接收处理时根据首地址来读取字符串内容?不知道这样可不可以?具体怎么做?

解决方案 »

  1.   

    可以。就这么做啊。把字符传指针强制转化为LPARAM,那边接收以后直接取。
    要注意的是,避免内存泄露。
      

  2.   

    在b中NEW一个BYTE数组,在a中DELETE。
    WPARAM为数组的首地址,在a中接收时强制转换成(BYTE *)类型。LPARAM为数组的长度。
      

  3.   

    弱弱再问一个问题
    OnMyMessEvent(WPARAM wParam, LPARAM lParam)//lParam放的是首地址
    {
       int nTemp = wParam; //长度,这个得到没什么问题
       BYTE *byMyTemp;
       byMyTemp = new BYTE[nTemp];
       
       //byMyTemp = lParam;
    }怎么样得到lParam中的首地址信息?
      

  4.   

    strcpy((char*)byMyTemp,(char*)lParam);
    或者:
    memcpy(byMyTemp,lParam,nTemp);
      

  5.   

    这样做没错的:
    BYTE *byMyTemp;
    byMyTemp = new BYTE[nTemp];
    //byMyTemp = lParam;
    strcpy((char*)byMyTemp,(char*)lParam);
    但是这样就有错了:
    strcpy((BYTE*)byMyTemp,(BYTE*)lParam);
    就有错误,这是什么道理啊?
    还有啊,能不能得到byMyTemp的长度?
      

  6.   

    OnMyMessEvent(WPARAM wParam, LPARAM lParam)//lParam放的是首地址
    {
       int nTemp = wParam; //长度,这个得到没什么问题
       BYTE *byMyTemp = (BYTE *)lParam;   .....使用byMyTemp做一些事情...
       delete [] byMyTemp;
    }
      

  7.   

    BTW:注意判断长度,指针是否为空....
      

  8.   

    这里有点问题
    如果使用strcpy((char*)byMyTemp,(char*)lParam);
    那就变成char类型了,例如0xD5这些数据就会出错
      

  9.   

    To:kvls(冰茶) 
    int nTemp = wParam; //长度,这个得到没什么问题
    BYTE *byMyTemp = (BYTE *)lParam;.....使用byMyTemp做一些事情...
    delete [] byMyTemp;这里的delete []操作是不是可以的?前面没有new操作啊?
      

  10.   

    1. 可以Delete,因为byMyTemp所指向的内存是new出来的.
    2. 如果包含了二进制数据,不要使用strcpy,请使用memcpy进行复制.
    BTW: 看你的疑问,多说一句,指针可以被认为是一个DWORD型的普通变量.这个变量的值是一个内存地址.
    所以有如下一段:
    变量一 = new ***..
    变量二 = 变量一
    delete 变量二 等价于 delete 变量一
      

  11.   

    最好不要用PostMessage,因为这是个异步函数,它不等另一方处理完消息就返回了,因此,字符串缓冲区可能无效,用SendMessage,这个保证同步