你这样用是没什么错误的,有可能是你那个结构的问题或CSTRING的问题.
你用别的办法替换一下试试看

解决方案 »

  1.   

    Vita m_Vita;
    m_Vita.m_member1 = 11;
    m_Vita.m_member2 = 22;
    ...::SendMessage( hWnd, Messafe, (UINT)&m_Vita, 0);
      

  2.   

    保证m_Vita所指向的内容在接受方去访问的时候没有销毁吗?就是m_Vita是否在消息发到之前被销毁了?
      

  3.   

    Vita m_Vita;
    m_Vita.Name = "aaa";::SendMessage(hWnd,Message,(LPARAM )&m_Vita,0);LRESULT CDakaileDlg::OnMsg(WPARAM wParam,LPARAM lParam)

         Vita *m_Vita;     m_Vita=(Vita *)lParam;
         ASSERT(m_Vita); 
         SetDlgItemText(IDC_STATIC_SHOW,m_Vita->Name);
         return TRUE;
    }
      

  4.   

    请保证同一个进程内部发送消息,m_Vita所指向的内容在接受方去访问的时候没有销毁。之后就万事大吉了。
      

  5.   

    to:liu_feng_fly(谁动了我的~~~~~~~~工资) 
    在接收方用ASSERT(m_Vita)可以保证m_Vita所指向的内容访问的时候没有销毁吗?
      

  6.   

    那应该把CString放到一个COPYDATASTRUC里去,然后发送WM_COPYDATA消息。否则你的处理函数中接收到的只是m_Vita的地址,而一个进程地址空间中的地址对另一个进程来说是没有意义的。
      

  7.   

    两个exe之间需要用共享内存。
    因为windows用的是虚拟内存,所以两个ext之间虽然指针指向的地址数值一样,但的实际物理内存中并不相同,所以你会看到乱码。
      

  8.   

    用WM_COPYDATA,并且不要用CString类,用字符串数组代替。
      

  9.   

    to: webber84(糕鱼昏) 
    你能说的详细一点吗?我是初学者,不太理解你的话。或者提供一些代码也可以,谢了!
    to: lihato(大海) 
    共享内存的方法我会用,可是我们老师说:传递结构指针会比共享内存的方法要灵活,传后就释放内存。(他说的不一定对!)他要求用结构指针的方法.请大家多多指教!!!
      

  10.   

    代码:
      头文件(Sendmes.h)
    #ifndef __SENDMES_H
    #define __SENDMES_H
    #endif
    typedef struct{
           CString Name;
    }Vita;...传递消息:
    ...
    Vita* m_Vita;
    ...
    ::SendMessage(hWnd,Message,(WPARAM)0,(LPARAM)m_Vita);...收消息:
    LRESULT CDakaileDlg::OnMsg(WPARAM wParam,LPARAM lParam)

         m_Vita=(Vita *)lParam;
         ASSERT(m_Vita); 
         SetDlgItemText(IDC_STATIC_SHOW,m_Vita->Name);
         return TRUE;
    } 下面是我测试成功了的:typedef struct{
    CString szName;
    }myStruct;LONG CSeimensSMSDlg::OnMyMsg(WPARAM wParam,LPARAM lparam)
    {
    CString *pText=(CString*)lparam;
    SetDlgItemText(IDC_MYMSG,pText->GetBuffer(pText->GetLength()));
    delete pText;
    return 1;
    }void CSeimensSMSDlg::OnButton2()
    {
    // TODO: Add your control notification handler code here
    //CString *text=new CString;
    //text->Format("Hello");
    myStruct* aa=new myStruct;
    aa->szName="aa";
    SendMessage(WM_MYMSG,(WPARAM)0,(LPARAM)aa);

      

  11.   

    注意:
    一般用LPARAM来传递一个指针,而不是WPARAM请注意我给你所作修改的的地方,还有我自己的一个原代码,我已测试成功了的。如有问题,请仔细地研究....
      

  12.   

    to ert :如果是两个exe之间,是不能用这种方法的.因为这种方法的前提就是在同一个进程空间里面,这样传递一个指针才会有效.因为一个进程对应一个地址空间.如果是两个exe,请考虑其他方法进行通信.
      

  13.   

    比如用这个
    WM_COPYDATA
    An application sends the WM_COPYDATA message to pass data to another application. 
      

  14.   

    两个应用程序之间传递结构,可以使用广播形式.
    SendMessage(HWND_BROADCASE,(WPARAM)&m_vData,(LPARAM)0);
      

  15.   

    TO : qiuanhong(爱写程序) 
    请问你测试成功的代码是进程间的程序吗?我需要的是进程间的,两个EXE之间的消息传递。请您尽快回复!谢了!
      

  16.   

    就是用WM_COPYDATA啦,你的是Win3.x时代的做法,现在由于VMM行不通了
      

  17.   

    就是用WM_COPYDATA啦,你的是Win3.x时代的做法,现在由于VMM行不通了
      

  18.   

    就是用WM_COPYDATA啦,你的是Win3.x时代的做法,现在由于VMM行不通了
      

  19.   

    用WM_COPYDATA消息即可。你的是Win3.x时代的做法,自Win95后,由于VMM此方法就行不通了。
      

  20.   

    char p[]="hello";
    COPYDATASTRUCT cs;
    cs.cbData=sizeof(p);
    cs.lpData=p;
    SendMessage(TargetWnd,WM_COPYDATA,(WPARAM)SourceWnd,(LPARAM)&cs);
    然后在你的消息处理函数中把cs取出来,cs.lpData就是你要的字符串。