我在发送程序中用:
CString str="Receiver";
CString sendstr = "haha";
CWnd *pWnd=CWnd::FindWindow(NULL,str);
if(pWnd)
pWnd->SendMessage(WM_COMM,0,(LPARAM)&sendstr);
在接收端用:
char str[256];
::wsprintf((char*) lParam , "%s",str  );
怎么收不到值啊?请高手指点!先给100分

解决方案 »

  1.   

    方法很多,比如用 wm_copydata 消息,共享内存映射文件,管道等皆可。
      

  2.   


    当然没有值
    你发的只是一个地址值
    而各个进程间的内存地址是独立的~~~
    在程序A这个地址是个CString,在程序B还不知道是什么呢
      

  3.   

    wm_copydata 消息怎么使用啊?请指点!
      

  4.   

    发送程序:
    void CTestDlg::OnButton1() 
    {
    COPYDATASTRUCT t;
    char str[] = "abcde";
    t.lpData = str;
    t.cbData = sizeof(str);
    t.dwData = 0;
    HWND hWnd = FindWindow(...);//也可通过别的办法得到目标程序的hwnd
    ::SendMessage(hWnd, WM_COPYDATA, (WPARAM) (HWND) hWnd, (LPARAM) (PCOPYDATASTRUCT)&t);
    }接收程序:
    //在类向导中添加WM_COPYDATA消息处理
    BOOL CaaaDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) 
    {
    CString s((LPCTSTR)pCopyDataStruct->lpData);
    MessageBox(s);
    return CDialog::OnCopyData(pWnd, pCopyDataStruct);
    }
      

  5.   

    使用WM_COPYDATA,看MSDN实例:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/dataexchange/datacopy/usingdatacopy.asp使用共享内存:
    http://www.codeproject.com/threads/csharedstruct.asp
      

  6.   

    请问WM_COPYDATA消息应该添加到哪个类里啊?
      我添加到CMyView里不行啊!
      

  7.   

    用 WM_SETTEXT 最方便!!!!!!!!!!!!!!!!WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
    WM_SETTEXT 会帮你复制 这个进程 的字符串 到另一个进程
      

  8.   

    发送的时候是用AfxGetMainWnd()->SendMessage因此在CMainFrame中添加消息响应
      

  9.   

    哈哈,问题解决,谢谢大家!开始散分
    我的发送程序是
    COPYDATASTRUCT t;
    char str[] = "hahaha";
    t.lpData = str;
    t.cbData = sizeof(str);
    t.dwData = 0;
    HWND hWnd = ::FindWindow(NULL,"Receiver");
    if (hWnd!=NULL) 
    {
    ::SendMessage(hWnd, WM_COPYDATA, (WPARAM) (HWND) hWnd, (LPARAM) (PCOPYDATASTRUCT)&t);
    }
    else MessageBox("I can not find window");
    接受是
    CString s((LPCTSTR)pCopyDataStruct->lpData);
    MessageBox(s);
      

  10.   

    前面回复错了(和另外的帖子混淆了,:)),因为CMainFrame是主窗口...