Wenn garnichts geht, dann kannst du es auch selbst machen ... am Besten in einem Thread, falls zwischen zwei Empfängen zu viel Zeit vergeht und der Haupthtread dann immer wieder etwas hängt.
CreateFile+ReadFile, wobei man ReadFile+Overlapped auch im Hauptthread asynchron nutzen könnte (ohne hängen)
oder TFileStream, bzw. THandleStream+CreateFile und Stream.Read***
oder Assign+Read (das alte Pascalzeugs)
oder ...
und als Dateiname z.B. 'COM1' bis 'COM9'
so lange im Windows als Standard bereits die richtige Config (Baud, StopBits, Parität usw.) eingestellt ist, mußt du im Programm nichts weiter machen.
wenn doch nicht, dann
SetCommState nach dem CreateFile ->
https://docs.microsoft.com/de-de/win...tions-resource
also im Thread die "Datei" (Gerät) öffnen
ein oder mehere Byte auslesen (read) ... es wird ohne Overlapped bestimmt gewartet, bis diese x Bytes da und gelesen sind (darum im Thread)
eventuell die Bytes in einer Variable (TBytes bzw. TArray<Byte>) zwischenspeichern
und dann via Synchronize oder Queue in den Haupthtead damit (oder wenn möglich auch direkt im Thread verarbeiten und das Ergebnis in den Hauptthread)