在跨进程消息的传递中,用到了一个WM_COPYDATA的函数,但是我在做这个程序(程序内容是,分别在两个编译器中创建窗口,这样两个窗口就是两个进程了)的时候发现,如int char CTime等等的类型都可以传过去,但是CString类型就传了个空内容过去,究竟是为什么呢??

解决方案 »

  1.   

    将CString类型改成char *就可以了
      

  2.   

    CWnd* m_wnd=CWnd::FindWindow("Afx:Sunpro:ObtGlobalCom",NULL);
    if(m_wnd!=NULL)
    {
    COPYDATASTRUCT cpd;
    cpd.dwData = 0; //打印和主程序交换数据
    cpd.cbData = m_saveFile.GetLength()+1;
    cpd.lpData = (void*)m_saveFile.GetBuffer(m_saveFile.GetLength()+1);
    m_wnd->SendMessage(WM_COPYDATA,0,(LPARAM)&cpd);
    m_saveFile.ReleaseBuffer();
    }
      

  3.   

    CString不能用于WM_COPYDATA,因其内部包含了LPTSTR m_pchData,这样当WM_COPYDATA时,其所指内容已不是当前进程中的地址了
      

  4.   

    为空白的原因是CString实际上传过去的是指向原来进程空间的字符数据的一个指针,如果你跨进程传递,那么这个指针已经无效了,它所指向的地方的数据是不可知的。