1.检查注册表,获取串口列表
RegOpenKeyEx、RegEnumValue
2.依次检测每个串口,直到找到可用的串口
//打开串口,这里采用同步独占的方式打开。
m_curHandle = CreateFile(
portName.toStdWString().data(), //串口名
GENERIC_READ | GENERIC_WRITE, //读/写
0, //独占
NULL,
OPEN_EXISTING, //打开现有
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, //异步IO
NULL
);
if ( !ReadFile( m_curHandle, recvBuffer, COMM_RECV_BUFFER, &oneRecvLen, &olWrite ) ) {
DWORD dwLastError = GetLastError();
//异步,需等待完成。
if ( dwLastError == ERROR_IO_PENDING ) {
GetOverlappedResult( m_curHandle, &olWrite, &oneRecvLen, TRUE );
} else {
m_lastError = QObject::tr("读串口失败,错误代码:%1!").arg( GetLastError() );
return false;
}
} else {
//同步完成。
}



