sendmessage传递数据的问题?

hupo1982 2006-03-07 07:12:57
我想在两个独立的可执行程序之间利用消息机制来传递一些字符串,我用在网上找到的一些源代码试着写了这个:
发送端:
#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可以弹出来,但是标题栏是乱码,而内容为空。我觉得接收端肯定接收到了消息,只是字符串的传递有问题,本人第一次做类似的东西,请各位高手帮忙看看,哪里有问题啊,谢谢!
...全文
201 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
YufengShi 2006-03-08
  • 打赏
  • 举报
回复
cpd.cbData = strlen("The processer is 20%")+1;
//要传送'\0'字符,这样才是完整的字符串
hupo1982 2006-03-08
  • 打赏
  • 举报
回复
还有点小问题,我在接收端用一个对话框显示接收到的字符,可发现字符后面跟了几个乱码?这是怎么回事啊?
我现在的发送端:
……
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;
}
哪位大侠指点一下?不好意思,分都给了楼上那位了。
顺便再问一句,我启动了两个接收端,一个发送端,然后发送的时候只有一个接收端响应?谁能给我讲解一下这个工作过程啊?谢谢!
hupo1982 2006-03-08
  • 打赏
  • 举报
回复
多谢,已经解决了
YufengShi 2006-03-07
  • 打赏
  • 举报
回复
不同进程里的相同地址是不能通用的,
字符串指针在进程a里有效,
到进程b里就失效了。
用WM_COPYDATA.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧