Results 1 to 4 of 4

Thread: SetCommTimeouts geeft False als resultwaarde terug

  1. #1
    Senior Member
    Join Date
    Sep 2001
    Location
    Schoonhoven
    Posts
    276

    SetCommTimeouts geeft False als resultwaarde terug

    Hallo allemaal,

    Ik wil de status van een LPT1 printer uitlezen. De createfile funtie werkt goed. Deze geeft een handle terug. Als ik vervolgens de SetcommTimeouts aanroept dan geeft deze FALSE terug als resultwaarde (De GetLastError geeft 1 terug). Heeft iemand enig idee waar dit aan zou kunnen liggen en wat die 1 betekend?

    Als ik trouwens daarna de WriteFile aanroep dan worden de bytes wel verzonden naar e printer. Als ik daarna de ReadFile aanroep dan blijft mijn programma hierop hangen en komt dus niet mer uit deze funtie.

    Hieronder het voorbeeldje dat ik heb gemaakt.

    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    const
      ASK_STATUS = '#27#5#6';
    VAR
      hport: Thandle;
      NumberOfBytes: Cardinal;
      Status_Result: Array[0..1] of Char;
      CommTimeOuts: _CommTimeouts;
    begin
      hport := CreateFile(Pchar('LPT1'),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    
      if hport = INVALID_HANDLE_VALUE
      then Showmessage('Fout bij CreateFile');
    
      CommTimeOuts.WriteTotalTimeoutMultiplier := 1000;
      CommTimeOuts.WriteTotalTimeoutConstant := 5000;
      CommTimeOuts.ReadIntervalTimeout := 0;
      CommTimeOuts.ReadTotalTimeoutMultiplier := 10;
      CommTimeOuts.ReadTotalTimeoutConstant := 1000;
    
      if not SetCommTimeouts(hport,CommTimeOuts) then
      begin
        ShowMessage('Fout bij SetCommTimeouts. GetLastError = '+IntTOStr(GetLastError));
        {GetLastError geeft hier de waarde 1 terug. Ik kan echter nergen vinden wat dat betekend}
      end;
      if Not WriteFile(hport,ASK_STATUS[1],3,NumberOfBytes,0)
      then Showmessage('Fout bij WriteFILE');
    
      if Not ReadFile(hport,Status_Result,2,NumberOfBytes,0)
      then Showmessage('Fout bij ReadFile');
    
      CloseHandle(hport);
    end;

    Alvast bedankt voor het meedenken.
    Vincent

  2. #2
    Senior Member
    Join Date
    Sep 2001
    Location
    Schoonhoven
    Posts
    276
    Probleem opgelost.

    Het probleem was dat de driver, die geinstalleerd was voor de printer, in de weg zat. Nadat ik de printer had verwijderd was het probleem opgelost. In mijn geval is deze oplossing goed ik de driver niet nodig heb.
    Vincent

  3. #3
    Probeer de onderstaande code eens om te zien wat de foutmelding precies is.
    Code:
    Win32Check(SetCommTimeouts(hport,CommTimeOuts));
    Is _CommTimeouts niet een pointer naar een structure? Als dat zo is moet je eerst even genoeg ruimte reserveren voor die structure, anders sta je zomaar ergens in het geheugen te poeren.
    We adore chaos because we like to restore order - M.C. Escher

  4. #4
    Senior Member
    Join Date
    Sep 2001
    Location
    Schoonhoven
    Posts
    276

    Readfile werkt niet

    Lord Larry... De _CommTimeouts is geen pointer maar en record structuur. Maar toch bedankt voor het meedenken.

    De WriteFile funtie werkt nu goed, maar de ReadFile funtie geeft false terug met als GetLastError waarde 1117 (ERROR_IO_DEVICE). Ik werk met Win2000. Heeft iemand enig idee wat ik hier fout doe. (Zie bovenstaande voorbeeld).
    Vincent

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •