//发送端struct Student { CString ID; CString Name;};
void CaaDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CString m_szData;
m_szData = "Hello";
HWND hWndRcv = ::FindWindow(NULL,"B"); if (hWndRcv == NULL) { AfxMessageBox("找不到接收窗口,发送不成功"); return ; } COPYDATASTRUCT cpd; cpd.dwData = 1; 
cpd.cbData = m_szData.GetLength() + 1; cpd.lpData = (void*)m_szData.GetBuffer(cpd.cbData); ::SendMessage(hWndRcv,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd); m_szData.ReleaseBuffer(); AfxMessageBox(_T("发送成功"));
//CDialogEx::OnOK();
}void CaaDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码 CString m_szID,m_szName; m_szID = "123"; m_szName = "成功"; Student *m_pStu= new Student(); m_pStu->ID=m_szID;
m_pStu->Name=m_szName; HWND hWndRcv = ::FindWindow(NULL,"B"); if (hWndRcv == NULL) { AfxMessageBox(_T("找不到接收窗口,发送不成功")); return ; } COPYDATASTRUCT cpd; cpd.dwData = 2;  cpd.cbData = sizeof(m_pStu); cpd.lpData = (PVOID)m_pStu; ::SendMessage(hWndRcv,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd); delete m_pStu; AfxMessageBox("发送成功");
}//接收端BOOL CBDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString m_szData;
switch (pCopyDataStruct->dwData) { // 接收到的是CString类型 case 1:
MessageBox((LPCSTR)(pCopyDataStruct->lpData)); break; case 2: 
CString id,name; CString str,dd; Student* pStu = (Student*)(pCopyDataStruct->lpData); id = pStu->ID; name = pStu->Name; dd.Format("ID=%s,name=%s",id,name);
MessageBox(dd);
}
return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);
}接收数据类型1没问题,正常显示hello,但是接收结构体的时候是乱码~
我感觉是不是我在这里
cpd.cbData = sizeof(m_pStu);
取的结构体长度有问题?我没有用Unicode~~

解决方案 »

  1.   

    结构体中将CString类型的换成TCHAR[]
      

  2.   

     cpd.cbData = sizeof(m_pStu);
    这句确实是错误的。
      

  3.   

      cpd.dwData = 2;     cpd.lpData = (PVOID)m_pStu;
        cpd.cbData = m_pStu->ID.GetLength()+m_pStu->Name.GetLength();
      

  4.   

    请问为什么不能用CString啊?我用TCHAR确实能传了,
    但是ID=123能正常显示,name=成功却还是乱码
    我把获取结构体长度cpd.cbData = sizeof(m_pStu);改成cpd.cbData = sizeof(m_pStu)+11;
    就都能正常显示了,我没有用Unicode,sizeof也不能获取到结构体正确的长度吗?
      

  5.   

    CString类型是不能用sizeof来计算的