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


Anmelden zum Antworten