使用ReadFile对串口进行同步读的时候返回长度和实际读到长度不符

JamesJiang 2003-04-20 09:57:51
hCOM = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
DCB dCB;
!GetCommState(hCOM, &dCB);
dCB.BaudRate = 38400;
dCB.ByteSize = 8;
dCB.Parity = NOPARITY;
dCB.StopBits = ONESTOPBIT;
SetCommState(hCOM, &dCB);
...

char strBuffer[1024];
ZeroMemory( strBuffer,sizeof(strBuffer) );
DWORD dwReadNum;
ReadFile(hCOM, strBuffer, 1024, &dwReadNum, NULL);

读完以后strBuffer中实际内容和dwReadNum不符,WHY?
...全文
124 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kataboy 2003-04-30
  • 打赏
  • 举报
回复
我也帮你UP!
JamesJiang 2003-04-21
  • 打赏
  • 举报
回复
up
JamesJiang 2003-04-20
  • 打赏
  • 举报
回复
To: xabcxyz(gg)
我没有用strlen获取实际长度,而是在调试状态下直接去看Buffer里面的内容,所以不会有含00结束符的情况。

chifengwatch 2003-04-20
  • 打赏
  • 举报
回复
//我的代码
DWORD nBytesRead, dwEvent, dwError;
COMSTAT cs;
if ( hComm == INVALID_HANDLE_VALUE )
{
return;
}
//取得状态
ClearCommError( hComm , &dwError , &cs );

if ( cs.cbInQue == 0 )//无数据
{
return ;
}
// 数据是否大于我们所准备的Buffer

if ( cs.cbInQue > sizeof( inbuff ) )
{
PurgeComm( hComm , PURGE_RXCLEAR ); // 清除COM 数据
return;
}

ReadFile( hComm , inbuff , cs.cbInQue , &nBytesRead , NULL ); // 接收COM 的数据

//用ClearCommError( hComm , &dwError , &cs )取得缓冲区的状态
xabcxyz 2003-04-20
  • 打赏
  • 举报
回复
是否收到信息中含00结束符,那样肯定无法用strlen获取正确长度的。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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