我想在两个独立的可执行程序之间利用消息机制来传递一些字符串,我用在网上找到的一些源代码试着写了这个:
发送端:
#define WM_CURRENTINFO WM_USER+0x0101
……
void CSenderDlg::OnCommand3() 
{
char *chr = "The processer is 20%";
char *cha = "null";
CString str="Receiver";
CWnd *pWnd=CWnd::FindWindow(NULL,str);
if(pWnd)
pWnd->SendMessage (WM_CURRENTINFO, (WPARAM)chr, (LPARAM)cha );}Receiver是我的接收程序。
接收端:#define WM_CURRENTINFO WM_USER+0x0101 
……
BEGIN_MESSAGE_MAP(CReceiverDlg, CDialog)
//{{AFX_MSG_MAP(CReceiverDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_CURRENTINFO,OnReceiveMsg)
END_MESSAGE_MAP()
……
void CReceiverDlg::OnReceiveMsg(WPARAM wParam,LPARAM lParam)
{
MessageBox((LPSTR)wParam,(LPSTR)lParam,0);
return;
}现在的情况是对话框MessageBox可以弹出来,但是标题栏是乱码,而内容为空。我觉得接收端肯定接收到了消息,只是字符串的传递有问题,本人第一次做类似的东西,请各位高手帮忙看看,哪里有问题啊,谢谢!

解决方案 »

  1.   

    不同进程里的相同地址是不能通用的,
    字符串指针在进程a里有效,
    到进程b里就失效了。
    用WM_COPYDATA.
      

  2.   

    还有点小问题,我在接收端用一个对话框显示接收到的字符,可发现字符后面跟了几个乱码?这是怎么回事啊?
    我现在的发送端:
    ……
    COPYDATASTRUCT cpd;
    cpd.dwData = 0;
    cpd.cbData = strlen("The processer is 20%");
    cpd.lpData = (void*)"The processer is 20%"; hWndReceived->SendMessage(WM_COPYDATA, NULL, (LPARAM) & cpd );
    ……
    接收端:
    ……
    bool CReceiverDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) 
    {
    AfxMessageBox((LPCSTR)(pCopyDataStruct->lpData));/*利用对话框表示收到消息*/
    return 1;
    }
    哪位大侠指点一下?不好意思,分都给了楼上那位了。
    顺便再问一句,我启动了两个接收端,一个发送端,然后发送的时候只有一个接收端响应?谁能给我讲解一下这个工作过程啊?谢谢!
      

  3.   

    cpd.cbData = strlen("The processer is 20%")+1;
    //要传送'\0'字符,这样才是完整的字符串