描述:
在设置串口设置时运行到SetCommState(m_hCom,&m_Dcb) 返回error87 GetCommState( m_hComm, &m_Dcb )处没报错下面是的程序希望大家帮忙看看,是哪里错了,谢谢!
BOOL CSerialPort:: Open( int dwComPort, DWORD dwBaudrate,BYTE bByteBits,BYTE bStopBits,BYTE bParity )
{
if( m_fOpen) return( TRUE );
char szPort[15];
DWORD dwResult=TRUE;
DWORD dwID;
HANDLE m_hComm;
wsprintf( szPort, "COM%d", dwComPort );
m_hComm = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL );
if( m_hComm ==NULL ) return(FALSE);
memset( &m_osRead, 0, sizeof( OVERLAPPED ) );
memset( &m_osWrite, 0, sizeof( OVERLAPPED ) );
//set commtimeouts
m_CommTimeouts.ReadIntervalTimeout = 0xFFFFFFFF;
m_CommTimeouts.ReadTotalTimeoutMultiplier = 0;
m_CommTimeouts.ReadTotalTimeoutConstant = 0;
m_CommTimeouts.WriteTotalTimeoutMultiplier = 0;
m_CommTimeouts.WriteTotalTimeoutConstant = 5000;
SetCommTimeouts(m_hComm,&m_CommTimeouts);
m_osRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
m_osWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
m_Dcb.DCBlength = sizeof( DCB );
int fSuccess=GetCommState( m_hComm, &m_Dcb );
//SetDCB(dwBaudrate,bByteBits,bStopBits,bParity);
if (!fSuccess)
{
char strl[50];
// Handle the error.
sprintf (strl,"GetCommState failed with error %d.\n", GetLastError());
MessageBox(NULL,strl,"GetCommState",MB_OK);
}
m_Dcb.BaudRate = dwBaudrate;
m_Dcb.ByteSize =bByteBits;
m_Dcb.StopBits =bStopBits;
m_Dcb.XoffChar=0x13;
m_Dcb.X />
switch (bParity)
{
case NOPARITY:
m_Dcb.fParity = FALSE;
m_Dcb.Parity = bParity;
break;
case ODDPARITY:
case EVENPARITY:
m_Dcb.fParity = TRUE;
m_Dcb.Parity = bParity;
break;
}
if(!SetCommState( m_hComm, &m_Dcb ) ||
!SetupComm( m_hComm, 1024, 1024 ) ||
!PurgeComm(m_hComm,PURGE_TXABORT | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_RXCLEAR)||
m_osRead.hEvent == NULL ||
m_osWrite.hEvent == NULL )
{
char str[50];
DWORD dwError = GetLastError();
sprintf (str,"SetCommState failed with error %d.\n", GetLastError());
MessageBox(NULL,str,"SetCommState",MB_OK); //此处报错
if( m_osRead.hEvent != NULL ) CloseHandle( m_osRead.hEvent );
if( m_osWrite.hEvent != NULL ) CloseHandle( m_osWrite.hEvent );
CloseHandle( m_hComm );
dwResult=FALSE;
}
else
{
m_hWatchThread = CreateThread(NULL,0,WatchThreadProc,0,0,&dwID);
if (NULL != m_hWatchThread)
{
dwResult = TRUE;
}
else
{
CloseHandle(m_hComm);
dwResult = FALSE;
}
}
m_fOpen = dwResult;
return( m_fOpen );
}