LRESULT CCOMRCVView::OnCommNotify(WPARAM wParam, LPARAM lParam)
{//
  CCOMRCVDoc* pDoc=GetDocument(); //获取文档类
  if(!m_bConnected || (wParam & EV_RXCHAR)!=EV_RXCHAR) // 是否是EV_RXCHAR事件?
  {
SetEvent(m_hPostMsgEvent); // 允许发送下一个WM_COMMNOTIFY消息
  return 0L;
  }
rcvcomm();
SetEvent(m_hPostMsgEvent); // 允许发送下一个WM_COMMNOTIFY消息
return 0L;
}
下面的是一个rcvcomm()函数的代码
DWORD length;
COMSTAT ComStat; //COMSTAT
DWORD dwErrorFlags;
ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
length=min(dwLength, ComStat.cbInQue);
ReadFile(m_hCom,buf,0*1024,&length,&m_osRead);
return length;

解决方案 »

  1.   

    非常感谢zhuyue_csdn(逐月)的支持,可能是我未将问题说清楚,根据你的回复只能接收奇偶校验正确时的数据,当奇偶校验错误时,该数据(奇偶校验错误)不能接收下来,我将奇偶位另作它用,所以会出现奇偶位错误,但数据正确,而ReadFile接收不到奇偶校验错误时的数据,希望各位高手指点。
      

  2.   

    我记得在DCB结构体中好像有这么个选项配置,可以忽略奇偶错,你改改试试。
    要不然就直接写底层吧!
      

  3.   

    谢谢fly2skylee(飞天)的指点,经过努力确实可以忽略奇偶错读取数据;但由于我在程序中需要经常使用SetCommState()函数改变通讯口的设置,导致硬件已接收尚未读取的数据丢失,能否有办法解决?请各位路过此地的高手指点。
      

  4.   

    不就是单片机和PC机的通读吗
    用N模试接收就可以了
      

  5.   

    具体的通讯接口你可根据其特点来校验!比如说PLC