Textmeldungen sehr schnell speichern und später auslesen - wie?



  • Querdenker schrieb:

    Jetzt, mit deiner Version, macht er sowas: "Geschrieben: 00336DDC Gelesen: 0033711C". Das will ich nicht 🙂

    Nee - nicht mit meiner Version. Du schreibst

    Querdenker schrieb:

    LogText << "Geschrieben: " << IntToHexCString(SendBuffer[i]) << " Gelesen: " << IntToHexCString(ReceiveBuffer[i]) << endl;
    

    IntToHexCString kam in meiner Version nicht vor.

    Dort wird versucht einen CString auf einem ostream auszugeben. Der Compiler frisst das, weil MS eine implizite Konvertierung von CString nach TCHAR* vorgesehen hat. Und der ostream kann jeden Pointer ausgeben. Vor impliziten Konvertierungen sollte man sich hüten.

    Das Formatieren von Bytes in Hex schön mit 0'en aufgefüllt ist ein wenig lästig. Der C++-Weg wäre in etwa dieser:

    // erfordert zusätzlich #include <iomanip>
    struct WriteByte
    {
        explicit WriteByte( char c )  // oder BYTE c
            : m_c( c ) {}
        friend std::ostream& operator<<( std::ostream& out, WriteByte b )
        {
            // Byte formatiert in hex ausgeben
            const char fillOld = out.fill('0');
            const std::ios_base::fmtflags flagsOld = out.flags();
            out << std::hex << std::setw(2) << std::uppercase << unsigned( b.m_c );
            out.flags( flagsOld );
            out.fill( fillOld );
            return out;
        }
    private:
        unsigned char m_c;
    };
    

    und beim Aufruf dann

    LogText << "Geschrieben: " << WriteByte(SendBuffer[i]) << " Gelesen: " << WriteByte(ReceiveBuffer[i]) << endl;
    

    Gruß
    Werner



  • Klappt so nicht:

    error C2440: 'type cast' : 'unsigned char' kann nicht in 'struct MyWriter::WriteByte' konvertiert werden



  • dann mach doch einfach aus dem

    explicit WriteByte( char c )  // oder Byte c
    

    ein

    explicit WriteByte( unsigned char c )  // oder WriteByte( BYTE c )
    

    (siehe Kommentar hinter der Zeile)

    Gruß
    Werner



  • Querdenker schrieb:

    error C2440: 'type cast' : 'unsigned char' kann nicht in 'struct MyWriter::WriteByte' konvertiert werden

    .. das sollte trotzdem gehen. In welcher Code-Zeile erscheint der Fehler?



  • LogText << FoundErrors << ": Geschrieben: " << WriteByte(SendBuffer[i]) << " Gelesen: " << WriteByte(ReceiveBuffer[i]) << endl;
    

    Für beide Aufrufe jeweils:

    error C2440: 'type cast' : 'unsigned char' kann nicht in 'struct MyWriter::WriteByte' konvertiert werden
    Quelle oder Ziel hat einen unvollstaendigen Typ



  • Quelle oder Ziel hat einen unvollstaendigen Typ

    kann es sein, dass du da irgendwo ne vorwärtsdeklaration gemacht hast?



  • otze schrieb:

    kann es sein, dass du da irgendwo ne vorwärtsdeklaration gemacht hast?

    wahrscheinlich ...

    Schreibe die struct WriteByte, so wie ich sie gepostet habe, vor die Methode oder Funktion, wo sie benutzt wird; in das cpp-File hinein.
    Das sollte funktionieren.

    Gruß
    Werner



  • Sorry das ich mich so lange nich gemeldet habe 🙂

    Ich hab alle eure Tipps befolgt, es hilft nur nichts:

    C:\USBIO\USBTest\MyWriter.cpp(650) : error C2440: 'type cast' : 'unsigned char' kann nicht in 'struct MyWriter::WriteByte' konvertiert werden
            Quelle oder Ziel hat einen unvollstaendigen Typ
    

    Und das für beide Aufrufe der struct, die struct steht vor ihrem Aufruf in der cpp Datei.



  • Dann solltest du den Ctor von WriteByte so anpassen, daß er einen unsigned char entgegennehmen kann (anstelle des platten 'char').



  • Querdenker schrieb:

    Ich hab alle eure Tipps befolgt, es hilft nur nichts:

    C:\USBIO\USBTest\MyWriter.cpp(650) : error C2440: 'type cast' : 'unsigned char' kann nicht in 'struct MyWriter::WriteByte' konvertiert werden
            Quelle oder Ziel hat einen unvollstaendigen Typ
    

    Und das für beide Aufrufe der struct, die struct steht vor ihrem Aufruf in der cpp Datei.

    Nein - nach der Fehlermeldung hast Du sie zur nested struct Deiner Klasse MyWriter gemacht und sie ist nicht vollständig definiert. Poste doch mal das Codesegment von struct WriteByte bis zum Ende der Methode wo Du die struct anwendest.
    Vielleicht hast Du auch bloß den Konstruktor vergessen, oder so was.

    Ist die Klasse MyWriter in einem H-File definiert oder im cpp-File?

    Gruß
    Werner


Anmelden zum Antworten