M
Hi,
ich versuche da einige Tipps zu geben.
Grundsätzliches: Eine Kommunikation über serielle Schnittstelle fehlerfrei zu programmieren ist nicht sooo problemlos wie man an Anfang meint, insbesondere auch wenn es um unerwartete Situationen (z.B. Leitung abgezogen) oder um Timeouts geht.
Deshalb gibt es bereits fertige und funktionierende Klassen wie z.B. CSerial auf codeproject oder codeguru (wird auch hier im Forum öfters empfohlen).
Nun zu Deinem speziellen Problem:
Du möchtest eigentlich nur den Zustand von der Leitung CTS abfragen, also keine übliche serielle Daten über RxD und TxD.
In diesem Fall kann man es selbst "zu Fuß" programmieren, da überschaubar.
Auf jeden Fall empfehle ich Dir, nach dem (erfolgreichen) Öffnen des COM-Ports unbedingt die Struktur DCB mit allen Daten aufzufüllen und mit SetCommState() zu initialisieren. Selbst dann, wenn Dich nur diese eine Leitung CTS interessiert!
Nun, ich setze mal voraus, daß die Variable hCom immer gültig ist (da nur als lokale Variable innerhalb von main() definiert). Das ist aus Deinem Listing nicht ganz klar erkennbar, da das Ende von main(), d.h. die zugehörige geschlossene Klammer nicht sichtbar ist.
Die eigentliche Abfrage der Portleitung CTS mit GetCommModemStatus() ist korrekt.
Wie prüfst Du eigentlich ob Dein Programm läuft oder nicht?
HTH,
Martin
P.S.: Bitte verwende gleich den eindeutigeren Namen TEXT("\\\.\\COM1") für CreateFile(), siehe auch MSDN: KB115831 "Specify serial ports larger than COM9" http://support.microsoft.com/kb/115831