关于读串口的有关问题,多谢各位了

关于读串口的问题,谢谢各位了
GetOverlappedResult总是返回false,使用
dwError = GetLastError();
这里的错误总是返回317,请问是什么原因啊,只有在win7下的USB转串口才有这种问题,真的好郁闷,谢谢各位了


DWORD dwError = 0;
DWORD dwPos = 0 ,dwNumRead = 0;
DWORD dwTick = 0, dwNow = 0;
DWORD dwRet = 0;
COMSTAT comStat;
BOOL bRead = FALSE;
OVERLAPPED m_ov;
DWORD BytesRead = 0;
BOOL  bResult = TRUE;

if(NULL == str || 0 >= len || 0 > iTimeOut)
{
//_snprintf(m_szErrorInfo, MAX_ERR_BUFF_LEN, "CAsyncCom::ReadComm invalide parameters");
//RET_LN()
return 0;
}

dwTick = GetTickCount();
while(1)
{
TRACE("while(1) inner\n");
Sleep(interval);
if (iTimeOut != 0)
{
dwNow = GetTickCount();
if((dwNow - dwTick) >= (DWORD)(iTimeOut))
{
//CComFun::WriteLog(0, "read serail port timeout!");
//return SERAIL_READ_TIME_OUT;
return 0;
}
}

ClearCommError(m_hComm, &dwError, &comStat);
if (comStat.cbInQue == 0)
{
if (bRead)
{
break;
}else{
TRACE("while(1) readfile comStat.cbInQue continue\n");
continue;
}
}

m_osRead.Offset = 0;
m_osRead.OffsetHigh = 0;
dwNumRead = min(len - dwPos, comStat.cbInQue);
TRACE("while(1) readfile\n");
bResult = ReadFile(m_hComm, str + dwPos, dwNumRead, &dwNumRead, &m_osRead);
if (!bResult) {

switch (dwError = GetLastError())
{
case ERROR_IO_PENDING://数据尚未读完

bRead = FALSE;
break;
}default:
{
break;
}
}
}else{
bRead = TRUE;
*retCount = dwNumRead;
}
if (!bRead)
{
bRead = TRUE;
bResult = GetOverlappedResult(m_hComm, // Handle to COMM port 
&m_ov, // Overlapped structure
&BytesRead, // Stores number of bytes read
TRUE); 
if (bResult == 0)
{
DWORD dwError = 0;
dwError = GetLastError();
int test = 123;
}
*retCount = BytesRead;
}
/*
if (bRet == TRUE)
{
bRead = TRUE;
dwPos += dwNumRead;
if (dwPos >= (DWORD)len)
{
break;
}else{
TRACE("while(1) readfile continue\n");
continue;
}
}*/

Sleep(interval);
TRACE("while(1) end\n");
}
*retCount = dwPos;

------解决方案--------------------
读出口还用OVERLAPPED?
------解决方案--------------------
抢分啦!谢谢楼主!
------解决方案--------------------
领分的来了。