Problem mit EscapeCommFunction();



  • //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "Unit2.h"
    HANDLE hComm = NULL;
    TRead *ReadThread;
    COMMTIMEOUTS ctmoNew = {0}, ctmoOld;
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    system("C:\\Finale\\a51 C:\\Finale\\test.hex  > c:\\Finale\\output.dat");
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
      ReadThread->Terminate();
    
      // WAIT FOR THREAD TO TERMINATE,
      // PURGE THE INTERNAL COMM BUFFER,
      // RESTORE THE PREVIOUS TIMEOUT SETTINGS,
      // AND CLOSE THE COMM PORT.
    
      Sleep(250);
      PurgeComm(hComm, PURGE_RXABORT);
      SetCommTimeouts(hComm, &ctmoOld);
      CloseHandle(hComm);
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    DCB dcbCommPort;
    
      // OPEN THE COMM PORT.
      // REPLACE "COM2" WITH A STRING OR "COM1", "COM3", ETC. TO OPEN
      // ANOTHER PORT.
    
      hComm = CreateFile("COM1",
                          GENERIC_READ | GENERIC_WRITE,
                          0,
                          0,
                          OPEN_EXISTING,
                          0,
                          0);
    
      // IF THE PORT CANNOT BE OPENED, BAIL OUT.
    
      if(hComm == INVALID_HANDLE_VALUE) Application->Terminate();
    
      // SET THE COMM TIMEOUTS IN OUR EXAMPLE.
    
      GetCommTimeouts(hComm,&ctmoOld);
      ctmoNew.ReadTotalTimeoutConstant = 100;
      ctmoNew.ReadTotalTimeoutMultiplier = 0;
      ctmoNew.WriteTotalTimeoutMultiplier = 0;
      ctmoNew.WriteTotalTimeoutConstant = 0;  
      SetCommTimeouts(hComm, &ctmoNew);
    
      // SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS.
      // THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST.
      // IF YOU WANT TO LATER ADD CODE FOR OTHER BAUD RATES, REMEMBER
      // THAT THE ARGUMENT FOR BuildCommDCB MUST BE A POINTER TO A STRING.
      // ALSO NOTE THAT BuildCommDCB() DEFAULTS TO NO HANDSHAKING.
    
      dcbCommPort.DCBlength = sizeof(DCB);
      GetCommState(hComm, &dcbCommPort);
      BuildCommDCB("9600,N,8,1", &dcbCommPort);
      SetCommState(hComm, &dcbCommPort);
    
      // ACTIVATE THE THREAD. THE FALSE ARGUMENT SIMPLY MEANS IT HITS THE
      // GROUND RUNNING RATHER THAN SUSPENDED.
    
      ReadThread = new TRead(false);
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Memo1KeyPress(TObject *Sender, char &Key)
    {
      TransmitCommChar(hComm, Key);
    
      // THIS PREVENTS TYPED TEXT FROM DISPLAYING GARBAGE ON THE SCREEN.
      // IF YOU ARE CONNECTED TO A DEVICE THAT ECHOES CHARACTERS, SET 
      // Key = 0 WITHOUT THE OTHER STUFF.
    
      if(Key != 13 && (Key < ' ' || Key > 'z')) Key = 0;
    }
    
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
    EscapeCommFunction(hComm, SETDTR);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
    EscapeCommFunction(hComm, CLRDTR);
    }
    //---------------------------------------------------------------------------
    

    WIESO geht das nicht *heul*... kann mir einer sagen wo der Fehler ist ?



  • Vielleicht solltest du mal dein Problem schildern bevor du hier rumheulst... "Geht nicht" ist keine ausreichende Fehlerbeschreibung/Fehlermeldung...

    -junix



  • ich dachte die Überschrieft sagt es, das Problem liegt in der
    EscapeCommFunction() function,
    wenn ich diese Aufrufe kackt der ganze rechner ab



  • Gehts vielleicht noch etwas unpräziser? Unter "Kackt ab" kann ich mir nicht wirklich was vorstellen... Ich hab noch nie nen Rechner kacken sehen... da fehlt alleine schon der Darm für...

    Das ist doch keine wissenschaftliche Vorgehensweise, einfach mal nen Source zu posten und zu schreien "geht nicht". Hat ja keiner die selben Möglichkeiten und die selbe Peripherie wie du...

    -junix



  • Hat ja keiner die selben Möglichkeiten und die selbe Peripherie wie du...

    Ich wette Doch... jeder hat einer Serielle Schnittstelle oder ????
    Ich denke mc_ip meint unter abkacken in die Knie gehen, sich aufhängen, nichts mehr machen.
    ich habe diesen Quellcode bei mir eingebaut und bin zum selben ergebniss gekommen. Das Programm mach nichts mehr, es hängt sich einfach auf.

    Das ist doch keine wissenschaftliche Vorgehensweise,

    Was hat das mit Wissenschaft zu tun ? Dies ist nur ne Fehler suche.

    @mc_ip
    Du hättest dich wirklich etwas genauer ausdrücken können

    @junix
    Immer auf dem Teppich bleiben.



  • G_Style schrieb:

    Hat ja keiner die selben Möglichkeiten und die selbe Peripherie wie du...

    Ich wette Doch... jeder hat einer Serielle Schnittstelle oder ????

    Jo, aber nicht die gleichen Bedingungen rund herum... Woher nimmst du z.B. TRead?

    G_Style schrieb:

    Das ist doch keine wissenschaftliche Vorgehensweise,

    Was hat das mit Wissenschaft zu tun ? Dies ist nur ne Fehler suche.

    Programmieren gehört - auf seine Art - ebenfalls zu den Wissenschaften... aber ok, streich "wissenschaftlich" und setz "strukturiert" ein.

    G_Style schrieb:

    @junix
    Immer auf dem Teppich bleiben.

    Ich steh stärker aufm Boden als du glaubst.

    -junix



  • Kann es sein daß da ein "DTR_CONTROL_ENABLE" im DCB (dcbCommPort) fehlt und das deshalb nicht geht?

    War nur so eine Idee habe im Moment keine Zeit das auszuprobieren.



  • Obwohl ich die Zeilen erweitert habe geht es immer noch nicht.


Anmelden zum Antworten