用其他软件接收数据没有问题,而用我写的代码接收最近只能接收100多个字节左右,以下是打开串口和接收数据代码,请各位帮忙BOOL CSerialComm::Open(int nPort, long nBaud)
{

if(m_bOpened)
return TRUE; if(m_ov.hEvent == NULL)
m_ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
else
ResetEvent(m_ov.hEvent); char szPort[10];
char szComParams[50];
DCB dcb;
sprintf(szPort, "COM%d", nPort);
sprintf(szComParams, "COM%d:%d,n,8,1", nPort, nBaud);
m_hIDComDev = CreateFile(szPort,
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL);
if(m_hIDComDev == INVALID_HANDLE_VALUE)
return FALSE;
COMMTIMEOUTS m_CommTimeOuts;
m_CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
m_CommTimeOuts.ReadTotalTimeoutMultiplier = 1000;
m_CommTimeOuts.ReadTotalTimeoutConstant = 1000;
m_CommTimeOuts.WriteTotalTimeoutMultiplier = 1000;
m_CommTimeOuts.WriteTotalTimeoutConstant = 1000;
if(SetCommTimeouts(m_hIDComDev, &m_CommTimeOuts))
{
if(SetCommMask(m_hIDComDev, EV_CTS|EV_RXCHAR))
{
if(GetCommState(m_hIDComDev, &dcb))
{
if(BuildCommDCB(szComParams, &dcb))
{
dcb.fRtsControl = DTR_CONTROL_ENABLE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
SetCommState(m_hIDComDev, &dcb);
}
}
}
}
SetupComm(m_hIDComDev, 1024, 1024);
PurgeComm(m_hIDComDev, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
//PurgeComm(m_hIDComDev, PURGE_TXCLEAR|PURGE_RXCLEAR);
m_bOpened = TRUE;
return TRUE;


}
int CSerialComm::ReadData(void* lpBuf)
{
BOOL bRead = TRUE;
BOOL bResult = TRUE;
DWORD dwError = 0;
DWORD BytesRead = 0;
DWORD dwTotalRead = 0;
int i = 0;
COMSTAT comstat;
unsigned char RXBuff;
//lpBuf=(void*)malloc(1);

for(;;)
{
bResult = ClearCommError(m_hIDComDev, &dwError, &comstat);
if(comstat.cbInQue == 0)
break;
if(bRead)
{
bResult = ReadFile(m_hIDComDev, &RXBuff, 1, &BytesRead, &m_ov);
//Sleep(10);
if(bResult)
bRead = TRUE;
}
if(!bRead)
{
bRead = TRUE;
bResult = GetOverlappedResult(m_hIDComDev, &m_ov, &BytesRead, TRUE);
}
dwTotalRead += BytesRead;
lpBuf=(void*)realloc(lpBuf,dwTotalRead);
memcpy(((unsigned char*)lpBuf + i), &RXBuff, 1);
i++;
}

return dwTotalRead;
}