на С# делаю так:
PHP код:
private void serialPort1_DataReceived(object senderSystem.IO.Ports.SerialDataReceivedEventArgs e)  //по событию "пришли данные" читаем их и присваиваем значения переменным
{
  
bytes serialPort1.BytesToRead//считаем количество байт
  
byte[] data = new byte[serialPort1.BytesToRead];//массив принятых занчений
  
serialPort1.Read(data0data.Length);//читаем
  //здесь всякие условия типа количества байт, контрольные суммы, префиксы и т.д.
  
temp1=data[0]; //присваиваем значение переменной. 
}
private 
void timer1_Tick(object senderEventArgs e//по таймеру обновляем label
{
  
label1.Text=temp1.ToString();

на С++, думаю, будет мало отличаться.
Вроде работает:
PHP код:
private: System::Void timer1_Tick(System::Object^  senderSystem::EventArgs^  e
             {
                 
label1->Text=System::Convert::ToString(b);
             }

    private: 
System::Void serialPort1_DataReceived(System::Object^  senderSystem::IO::Ports::SerialDataReceivedEventArgs^  e
             {
                 
unsigned char bytes serialPort1->BytesToRead;
                 
int i=0;
                 if (
bytes >= 8
                 {
                    
bytes 0;
                    
char data[10];
                    for(
i=0;i<8;i++)
                    {
                      
data[i]=System::Convert::ToChar(serialPort1->ReadChar());
                    }
                    
b=data[1]; 
                 }
             } 
Это для передачи данных побайтово а не строкой, но смысл тот же