串口接收数据时出现乱码,怎么解决?
发送代码:
VOID CSerial2Dlg::OnSend() 
{
// TODO: Add your control notification handler code here
CBitmap bitmap;
CString str;
DWORD dwTrans;
BOOL BWriteStat;
COMSTAT Comstat;
DWORD dwErrorFlages;

m_strSendText.GetWindowText(str);
if(str.IsEmpty())
return; OVERLAPPED m_osWrite;
memset(&m_osWrite,0,sizeof(OVERLAPPED));
m_osWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
ClearCommError(hCom,&dwErrorFlages,&Comstat);
BWriteStat = ::WriteFile(hCom,str.GetBuffer(str.GetLength()), str.GetLength(), &dwTrans, &m_osWrite);
if(!BWriteStat)
{
if(GetLastError() == ERROR_IO_PENDING)
{
WaitForSingleObject(m_osWrite.hEvent,1000);

bitmap.LoadBitmap(IDB_NORMAL);
HBITMAP hBitmap = (HBITMAP)bitmap;
m_Sending.SetBitmap(hBitmap);
}
}

GetDlgItem(IDC_DISP)->SetWindowText(str);
Invalidate(FALSE);
AfxMessageBox(str);
}接收代码:
VOID CSerial2Dlg::OnRecive() 
{
// TODO: Add your control notification handler code here

CBitmap bitmap;
OVERLAPPED m_osRead;
memset(&m_osRead,0,sizeof(OVERLAPPED));
m_osRead.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
COMSTAT ComStat;
DWORD dwErrorFlags;

char str[512];
memset(str,0,sizeof(str));
DWORD dwByteRead = 512; //读取的字节数
BOOL bReadStat;

ClearCommError(hCom,&dwErrorFlags,&ComStat);
dwByteRead = min(dwByteRead,(DWORD)ComStat.cbInQue);
bReadStat = ReadFile(hCom,str,dwByteRead,&dwByteRead,&m_osRead);

if(!bReadStat)
{
if(GetLastError() == ERROR_IO_PENDING)
{
WaitForSingleObject(m_osRead.hEvent,2000); //等待读操作完成

bitmap.LoadBitmap(IDB_NORMAL);
HBITMAP hBitmap = (HBITMAP)bitmap;
m_Reciving.SetBitmap(hBitmap);
}
bitmap.LoadBitmap(IDB_INIT);
HBITMAP hBitmap = (HBITMAP)bitmap;
m_Reciving.SetBitmap(hBitmap); }
PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXABORT|PURGE_RXCLEAR);
m_disp += str;
m_disp += "\r\n";
GetDlgItem(IDC_DISP)->SetWindowText(m_disp);
AfxMessageBox(str); UpdateData(FALSE);
      
}