Non mi ricordo se il tuo progetto era console o GUI cmq devi aspettarti un evento dalla classe CSerial che ti dice quand'è il momento di leggere dati. Poi la lettura la fai leggendo un buffer a tuo piacimento.
Esempio in un mio programma.
void CSerialPortManager::ReadData()
{
DWORD dwBytesRead = 0;
BYTE buffer[101];
do
{
Read(buffer,sizeof(buffer),&dwBytesRead);
if (dwBytesRead > 0)
{
std::string data((char *)buffer,dwBytesRead);
data.erase(std::remove_if(data.begin(),data.end(),
[](const char & t)
{
return (t == _T('\r')) || (t == _T('\n'));
}
),data.end());
std::string::size_type pos = data.find_first_of(_T(' '));
if(pos != std::string::npos)
{
data = data.substr(++pos);
double volt = std::stod(data);
SetVoltage(volt * 0.0196363);
}
}
}
while (dwBytesRead == sizeof(buffer));
}
Lascia stare le cose che non capisci lì, ma concentrati sulla parte do-while. Legge finchè non ci sono più dati e l'if controlla se c'è qualcosa. (dwBytesRead > 0). Se c'è processi i dati ricevuti.
Ma tutto questo viene richiamato dopo aver ricevuto l'evento dei dati disponibili sulla porta seriale. Leggi bene la documentazione della classe.