Problem mit char



  • Hallo
    in meinem Programm sende ich eine Sequenz von Bytes über die Serielle Schnittstelle.

    BOOL SerialPort::WriteNBytes (DWORD dwCount, BYTE* What) 
    {
      DWORD ByteWritten;
    
      int j;
      if (IsOpen()==FALSE) return FALSE;
    
    	  ::WriteFile (hCom, What, dwCount, &ByteWritten,0);
    
      if (ByteWritten!=  dwCount) return FALSE;
    		return TRUE;
    	}
    

    dwCount ist die Anzahl der Bytes, What sind die Bytes die gesendet werden.
    BYTE = typedef unsigned char.
    Jetzt möchte ich gerne jedes Byte einzeln senden. Dazu brauch ich eine Schleife, dwCount ist 1, und für What muss ich jedes Byte einzeln auslesen.

    Wie kann ich bei What jedes einzelne Byte behandeln??

    BOOL SerialPort::WriteNBytes (DWORD dwCount, BYTE* What) 
    {
      DWORD ByteWritten;
    
      int j;
      if (IsOpen()==FALSE) return FALSE;
      for(j=0; j<dwCount; j++)  
      {	  	  
    	  ::WriteFile (hCom, What[j], 1, &ByteWritten,0);
      }
    
      if (ByteWritten!=  dwCount) return FALSE;
    		return TRUE;
    }
    What[j] funktioniert nicht! Hat jemand eine Idee?
    


  • WriteFile erwartet einen char* (Zeiger), also mußt du dessen Adresse bilden:

    ::WriteFile (hCom, &(What[j]), 1, &ByteWritten,0);
    

    (übrigens funktioniert hier deine Fehlerabfrage nicht mehr - ByteWritten erhält nur die Anzahl geschriebener Bytes beim letzten Schreibvorgang, also entweder 0 (Fehler) oder 1 (in Ordnung)).

    PS: Hat es einen bestimmten Grund, daß du die Daten nicht im Block senden willst?



  • Ich möchte Sie einzeln senden um die Zeitdifferenz zwischen den einzelnen Bytes besser kontrollieren zu können.
    Ich werde das mal ausprobieren, ich hoffe mal das das klappt 😉



  • Okay es funktioniert, danke CStoll 👍


Anmelden zum Antworten