Wieso ist Cserialwnd.read auf 8 Byte begrenzt?
-
Hallo,
ich schicke an meine Anwendung serielle Daten
(mit der CSeriel) und lasse diese an einem Eingabefeld,
das ich mit einer String Variablen (m_anzeige) verbunden habe, anzeigen.
Es funktioniert alles einwandfrei, nur wenn ich längere
Strings schicke(länger als 9 Zeichen)werden sie im Eingabefeld
einfach abgeschnitten (natürlich ist das Feld groß genug
)Vieleicht seht ihr das Problem:
LRESULT CSvenDlg::OnSerialMsg (WPARAM wParam, LPARAM /*lParam*/) { //Wenn eine Nachricht kommt tue diest do{ serialwnd.Read(abBuffer,sizeof(abBuffer),&dwBytesRead); if (dwBytesRead > 0) { abBuffer[dwBytesRead]= 0; m_anzeige=abBuffer; } } while (dwBytesRead == sizeof (abBuffer)); // Schleifenbedingung UpdateData(false); serialwnd.Close(); memset(abBuffer, 0, sizeof(abBuffer)); serialwnd.Open(_T("COM1"), GetSafeHwnd(), WM_NULL); return 0; }Viele Grüße
Sven
-
Und wie groß ist abBuffer? Denn du zeigst maximal an, was da reinpasst.
-
BYTE abBuffer[100];
-
Ich machs so:
DWORD dwBytesRead = 0; BYTE abBuffer[100]; do { // Read data from the COM-port m_serial.Read(abBuffer,sizeof(abBuffer),&dwBytesRead); abBuffer[dwBytesRead] = '\0'; } while (dwBytesRead == sizeof(abBuffer));und bei mir geht das problemlos. Allerdings sind meine Stringlängen nur 14-16 Zeichen groß. Kann Dein Eingabefeld auch so viele Zeichen darstellen?
-
Ja aber ich habs doch genauso wie du gemacht

Und um die Stringlänge des Anzeigefeldeszu testen habe ich folgendes gemacht:
In die Funktion des OK Buttons:m_anzeige="Haaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaallllllllllllllllloo"; UpdateData(false);geschrieben.
Das geht tadelos.
Was kann das nur sein.
Wird die Speichergröße
( abBuffer[dwBytesRead]= 0)
vieleicht zu früh begrenzt?
Ne kann ja eigendlich auch nicht sein .Hmmm was ist ads nur?
-
Ich habe nun &dwBytesRead anzeigen lassen und
festgestellt das die Zahl kontinuierlich 8 ist .
Das heißt serialwnd.Read ließt immer nur 8 Byte zur Zeit vom Port.
Wie kann ich dieser Sache den Herr werden, wenns nun mal mehr als 8 sind?Gruß
Sven