16,472
社区成员
发帖
与我相关
我的任务
分享
//返回读取的字节长度
DWORD ReadData(void *pBuffer, int iBuffLen)
{
DWORD dwReaded = 0;
DWORD dwCommErr = 0;
COMSTAT ComStat = {0};
ClearCommError(hComm, &dwCommErr, &ComStat);
if(ComStat.cbInQue > 0)
{
OVERLAPPED ovr = {0};
ovr.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if(ReadFile(hComm, pBuffer, min((int)ComStat.cbInQue, iBuffLen), &dwReaded, &ovr))
{
//直接读取成功
}
else
{
DWORD dwErr = GetLastError();
if(dwErr == ERROR_IO_PENDING) //ERROR_IO_PENDING
{
if(!GetOverlappedResult(hComm, &ovr, &dwReaded, TRUE))
{
dwErr = GetLastError();
TRACE(_T("GetOverlappedResult failed %u"), dwErr);
}
}
else //failed
{
TRACE(_T("ReadFile failed %u\n"), dwErr);
}
}
CloseHandle(ovr.hEvent);
}
return dwReaded;
}
//返回读取的字节长度
DWORD ReadData(void *pBuffer, int iBuffLen)
{
DWORD dwReaded = 0;
DWORD dwCommErr = 0;
COMSTAT ComStat = {0};
ClearCommError(hComm, &dwCommErr, &ComStat);
if(ComStat.cbInQue > 0)
{
OVERLAPPED ovr = {0};
ovr.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if(ReadFile(hComm, pBuffer, min((int)ComStat.cbInQue, iBuffLen), &dwReaded, &ovr))
{
//直接读取成功
}
else
{
DWORD dwErr = GetLastError();
if(dwErr == ERROR_IO_PENDING) //ERROR_IO_PENDING
{
if(!GetOverlappedResult(hComm, &ovr, &dwReaded, TRUE))
{
dwErr = GetLastError();
TRACE(_T("GetOverlappedResult failed %u"), dwErr);
}
}
else //failed
{
TRACE(_T("ReadFile failed %u\n"), dwErr);
}
}
}
return dwReaded;
}