MFC显示收到的数据的问题

tomzhch 2015-07-09 08:22:38
我用多线程和udp接收数据,然后用自己写的一个类把收到的字符串解析出来,然后在类里有一个成员函数,可以产生一个Recvdata的消息,并把要输出的部分发给Recvdata的消息响应函数,但是输出的是乱码,不知是为什么

void Protocol::print(HWND hwnd)
{
char tempBuf[100];
sprintf_s(tempBuf, ("DLESOH:[%d, %d]"), DLESOH[0], DLESOH[1]);
//LPARAM a = (LPARAM)tempBuf;
::PostMessage(hwnd, WM_RECVDATA, 0, (LPARAM)tempBuf);/////////在这里看tempBuf里的值是正确的
}

下面的是消息响应

LRESULT CSendCommandDlg::OnRecvdata(WPARAM wParam, LPARAM lParam)
{
// 取出接收到的数据
CString str((char*)lParam);/////////////////这里str得到的数据已经不对了
CString strTemp;
//获得已有数据
GetDlgItemText(IDC_EDIT_RECV, strTemp);
str += "\r\n";
str += strTemp;
//显示所有接收到的数据
SetDlgItemText(IDC_EDIT_RECV, str);
return 0;
}
...全文
183 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdghchj 2015-07-10
  • 打赏
  • 举报
回复
PostMessage是异步投递消息,而你的参数tempBuf是个局部变量。 PostMessage投递消息到异步消息队列后就立即返回,然后tempBuf生命周期结束被回收,此时该投递的消息可能都还没有被窗口处理,等该消息处理时,参数字符串可能已经被释放了,当然可能是乱码。 用SendMessage即可。
tomzhch 2015-07-10
  • 打赏
  • 举报
回复
引用 2 楼 sdghchj 的回复:
PostMessage是异步投递消息,而你的参数tempBuf是个局部变量。 PostMessage投递消息到异步消息队列后就立即返回,然后tempBuf生命周期结束被回收,此时该投递的消息可能都还没有被窗口处理,等该消息处理时,参数字符串可能已经被释放了,当然可能是乱码。 用SendMessage即可。
感谢!!!!!!!!!
tomzhch 2015-07-09
  • 打赏
  • 举报
回复
这是接收数据线程的代码 DWORD WINAPI CSendCommandDlg::RecvProc(LPVOID lpParameter) { SOCKET sock = ((RECVPARAM *)lpParameter)->sock; HWND hwnd = ((RECVPARAM *)lpParameter)->hwnd; delete lpParameter; SOCKADDR_IN addrFrom; ZeroMemory(&addrFrom, sizeof(SOCKADDR_IN)); int len = sizeof(SOCKADDR); char recvBuf[200]; int retval; while (TRUE) { //接收数据 retval = recvfrom(sock, (char *)recvBuf, 200, 0, (SOCKADDR *)&addrFrom, &len); if (SOCKET_ERROR == retval) break; if (retval > 1) { Protocol data(recvBuf); data.print(hwnd); } } return 0; }

24,853

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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