Alter Hut Serielle schnittstelle komme nicht weiter :-(



  • Das wird ja heikel 😮

    DWORD ReceiveData(char* Data,int n) //also ist das wie ein Array
    ist dann char Data so gesehen der zeiger auf das Array also position auf einen Arrayblock
    
    n = größe des Arraysblock in Zeichen 
    
    sie gibt ne Adresse an NumberOfBytesRead 
    
    [cpp]DWORD NumberOfBytesRead=ReceiveData(Buffer,BufSize);//<-------??????
    

    zurück

    du ich hab keinen blaasen schimmer 😞
    😞



  • Ich formatiers dir mal etwas um...

    DWORD ReceiveData(char* Data,int n)
    {
        DWORD NumberOfBytesRead;      // Anzahl der gelesenen Bytes
        bool b = ReadFile(hComReceive, Data, n, &NumberOfBytesRead, 0);                       
    
        if (b == false)
            ShowLastError("ReadFile");
    
        return NumberOfBytesRead;
    }
    

    Versuchen wirs jeztt nochmal...

    junix schrieb:

    Was macht denn die Funktion genau?

    Achte mal darauf womit "b" initialisiert wird...



  • bool b = ReadFile(hComReceive, Data, n, &NumberOfBytesRead, 0);
    

    Da b ein Bool ist und in der Klammer nicht 0 steht wird es mit True formatiert oder?



  • Und was genau ist "ReadFile"?



  • Ich weiß jetzt ein Bischen mehr war gestern noch bei meinem Lehrer der drück sich nicht grad Verständlich aus wenn du weißt as ich meine Readfile ist das lesen von Dateien in diesen fall von der Win32

    bool b = ReadFile(hComReceive, Data, n, &NumberOfBytesRead, 0);
    

    So dieser Satz heißt:
    n = sind die zu lesenen Bytes
    NumberOfBytesRead = sind die tatsächlich gelesenen bytes
    Data = ist der zeiger auf das Array Feld

    bool b heißt wenn was da ist dann lese

    verbesser mich wenn es nicht stimmt !



  • bool b heißt wenn was da ist dann lese

    😕 😕 😕 😕 😕



  • bool b = ReadFile(hComReceive, Data, n, &NumberOfBytesRead, 0);
    

    ne hab schon eiter gedacht es heißt hier natürlich setze b auf true 🕶ich blindfisch 😉



  • was ist denn 0?

    &NumberOfBytesRead, 0);
    


  • Hallo

    schau dir doch einfach die Parameter der Funktion in der MSDN.
    an. Dort ist auch eine Beschreibung, warum du bei dir den letzten Wert auf 0 setzten must.

    bis bald
    akari



  • junix hälst du es wirklich für eine gute Idee ihm programmieren anhand eines nicht trivialen Themas beizubringen? 🙄



  • ot schrieb:

    junix hälst du es wirklich für eine gute Idee ihm programmieren anhand eines nicht trivialen Themas beizubringen? 🙄

    Welches nicht triviale Thema? Ich bring ihm doch nicht programmieren bei, sondern das Denken, analysieren und finden von Informationen... Und das kann man eigentlich anhand jeden beispiels machen...



  • junix schrieb:

    ot schrieb:

    junix hälst du es wirklich für eine gute Idee ihm programmieren anhand eines nicht trivialen Themas beizubringen? 🙄

    Welches nicht triviale Thema? Ich bring ihm doch nicht programmieren bei, sondern das Denken, analysieren und finden von Informationen... Und das kann man eigentlich anhand jeden beispiels machen...

    Und das ist die Grundlage des Programmierens...allerdings hat ihn noch keiner darauf hingewiesen, dass er nicht Bitweise sondern Byteweise liest. Zum Verständnis ist das vielleicht nicht ganz unwichtig.



  • Serieller schrieb:

    Und das ist die Grundlage des Programmierens...

    Endlich jemand der das begreift *freu*

    Serieller schrieb:

    allerdings hat ihn noch keiner darauf hingewiesen, dass er nicht Bitweise sondern Byteweise liest. Zum Verständnis ist das vielleicht nicht ganz unwichtig.

    Würde ich so jetzt nicht sagen:

    junix schrieb:

    com-cat schrieb:

    Ich verstehe noch nicht den zusammen hang von:
    1. das Bit was empfangen wird wo legt der Rechner es ab ?

    Die Bits werden im 16C550-Chip-Core des PCs gelagert, bis dier Chip das Byte für voll hält. Dann wird es in einen Puffer gelegt und das Betriebssystem holt das Byte ab. Du wiederum holst das Byte danna us diesem Puffer mit der ReadFile-Funktion...



  • hab es hingekriegt !!!! Hurra danke für die Hilfe!!!!!



  • Es gehört im allgemeinen zum guten Ton eine selbst gefundene Lösung zu posten, damit a) andere davon profitieren in Zukunft, b) damit erfahrerene Mitglieder die Lösung verifizieren können und evtl auch Warnungen aussprechen können...



  • Jo hab ich vergessen mußte erst mal ein paar fehler ausmerzen

    DWORD ReceiveData(char* Data,int n)
    {
    DWORD NumberOfBytesRead=0;
    bool b= ReadFile(hCom,Data,n,&NumberOfBytesRead,0); // kein overlapped I/O
    
    if (!b)
    //ShowMessage("ReadFile");
    //return
    NumberOfBytesRead;
    }
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    const int BufSize = 112000;
    char Buffer[BufSize];
    DWORD NumberOfBytesRead= ReceiveData(Buffer,BufSize);
    if (NumberOfBytesRead > 0)
    {
    AnsiString s;
    for (DWORD i=0;i<NumberOfBytesRead;i++)
            {
            s=s+Buffer[i];
    
            Memo1->Lines->Add(Buffer);
            }
    
    }
    

    und noch mal Danke für die Hilfe 👍 👍



  • Das funktioniert so 100% nicht...


Anmelden zum Antworten