Hallo, hab da mal ne Frage! Ich programmiere grade ein Windows Fenster mit dem ich die serielle Schnittstelle bedienen kann. Hab mir dazu eine fertige Klasse im Netz besorgt. Die funktioniert an sich auch schon. Das problem ist nur: wenn ich Daten aus dem Buffer auslesen will brauche ich ja vorher eine Nachricht von Windows, das Date in den Buffer geschrieben wurden. Gibt es da schon eine Nachricht in Win.h und wenn ja wie heißt die oder welche Nummer hat sie. Falls nicht wie kann ich mir in Visual C++ selbst so eine Nachricht erzeugen? Gruß B.
WaitCommEvent (oder CreateEvent + WaitCommEvent wenn FILE_FLAG_OVERLAPPED verwendet wird). Eine andere Möglichkeit wäre z.B., mit SetCommTimeouts die Timeouts beim Lesen auszuschalten und dann regelmäßig (Timer, Thread) mit ReadFile abzufragen, ob Daten angekommen sind.
Ok WaitCommEvent hab ich gefunden. Ist aber keine Nachricht sondern sdtcall. Bin noch ein absoluter Anfänger, desshalb die Frage: wie binde ich diesen Aufruf in mein Programm ein. Hab folgendes versucht: im Header meiner Klasse: class CSerial { public: CSerial(); ~CSerial(); ..... BOOL WaitCommEvent(HANDLE,LPDWORD,LPOVERLAPPED); ..... protected: BOOL WriteCommByte( unsigned char ); HANDLE m_hIDComDev; OVERLAPPED m_OverlappedRead, m_OverlappedWrite; BOOL m_bOpened; ........ Und in CComDlg : ....... BOOL CSerial::WaitCommEvent(HANDLE m_hIDComDev, LPDWORD lpword, LPOVERLAPPED m_OverlappedRead) { CSerial serial; if (serial.Open(1, 9600)) { char* lpBuffer = new char[500]; int nBytesRead = serial.ReadData(lpBuffer, 500); UpdateData(TRUE); m_receive = lpBuffer; UpdateData(FALSE); delete []lpBuffer; } else AfxMessageBox("Failed to open port!"); return NULL; } ...... void CComDlg::OnButton1() // Open COMPORT ...... Funktioniert natürlich nicht! Falls jemand die zeit hat und sich die mühe machen könnte mir das etwas genauer zu erklären wäre ich sehr dankbar!! Gruß B.
Ach und noch ne Frage!!!!!! Warum kann ich den Buffer nicht mit einem standart event zb. Button click oder so auslesen. Das geht nur, wenn unmittelbar Daten gesendet werden. Überschreibt Windows den Buffer nach kurzer zeit wieder mi 0000.. ? so bis dahin schönes WE. Gruß B.
mit int nBytesRead = serial.ReadData(lpBuffer, 500); liest du ja den seriellen Buffer aus. durch dieses auslesen wird der Buffer gelöscht. wenn du in dem WaitCommEvent den buffer schon ausliest, dann kannst du ihn über ein buttonevent nicht nochmal auslesen. thomas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.