LPT1 Port Kommunikation schlägt fehl

Tetse

Grünschnabel
Mit untenstehender Funktion öffne ich den LPT1 Port, um Daten zu senden und zu empfangen. Mit der COM1 Schnittstelle funktioniert alles ohne Probleme, jedoch bekomme ich bei LPT1 über GetLastError folgende Fehlermeldung bei der Funktion SetCommState (...)
Fehlercode 87, falscher Parameter

Wie gesagt, wenn ich szPort = "\\\\.\\COM1" setze, dann kommt diese Fehlermeldung nicht und die Kommunikation klappt so wie sie soll.
Was muss ich abändern, damit ich auch LPT1 benutzen kann?
Wäre sehr froh, wenn mir jemand helfen könnte.

Code:
HANDLE CSerial::Open (int nPort, int nBaud, int nBits, int nStopp, int nParity)
{
   if (INVALID_HANDLE_VALUE != hComm)  // COM-Port überhaupt geöffnet?
       return NULL;

   char szPort[15];
 
   // Aus einer "1" in nPort schreiben wir so "COM1" in szPort z.B..
   wsprintf (szPort, "\\\\.\\LPT%d", nPort);

   hComm = CreateFile (szPort, // COM-Port öffnen
                       GENERIC_READ | GENERIC_WRITE, // wir wollen lesen und schreiben
                       0,
                       0,
                       OPEN_EXISTING,
					   FILE_ATTRIBUTE_NORMAL,
                       NULL); // nicht OVERLAPPED, wir holen uns den Port exclusiv

   if (hComm == INVALID_HANDLE_VALUE) // hat es geklappt? Bei Fehler ist hier Schluss!
   {
		Error("Open...");
 
		return NULL;
   }
   // Alte Timeouts merken. Bei Fehler ist hier Schluss!
   if (!GetCommTimeouts(hComm, &timeouts_alt)) 
   {	   
      Close ();
      MessageBox (NULL, "Fehler beim Öffnen des COM-Ports!\nGetCommTimeouts()",
                  NULL, NULL);
      return NULL;
   }

   // Eine Struktur vom Typ COMMTIMEOUTS erzeugen und neue Timeouts setzen
   COMMTIMEOUTS timeouts;
   timeouts.ReadIntervalTimeout         = 200;
   timeouts.ReadTotalTimeoutMultiplier  = 200;
   timeouts.ReadTotalTimeoutConstant    = 200;
   timeouts.WriteTotalTimeoutMultiplier = 200;
   timeouts.WriteTotalTimeoutConstant   = 200;

   // Neue Timeouts setzen. Bei Fehler ist hier Schluss!
   if (!SetCommTimeouts(hComm, &timeouts)) 
   {
	  Error("Setcom...");

      return NULL;
   }

   DCB dcb; // Struktur vom Typ DCB erzeugen

   ZeroMemory (&dcb, sizeof(dcb)); // ..und schön löschen (wichtig!)
   // Die bestehenden Parameter holen. Bei Fehler ist hier Schluss!
   if (!GetCommState (hComm, &dcb))
   {
	  Error("Getcom...");
  
      return NULL;
   }

   dcb_alt = dcb; // alte Parameter sichern
   dcb.DCBlength         = sizeof(DCB);
   dcb.fBinary           = TRUE; // muss immer "TRUE" sein!
   dcb.fParity           = TRUE;
   dcb.fOutxCtsFlow      = FALSE;
   dcb.fOutxDsrFlow      = FALSE;
   dcb.fDtrControl       = DTR_CONTROL_ENABLE;
   dcb.fDsrSensitivity   = FALSE;
   dcb.fTXContinueOnXoff = TRUE;
   dcb.fOutX             = FALSE;
   dcb.fInX              = FALSE;
   dcb.fErrorChar        = FALSE;
   dcb.fNull             = FALSE;
   dcb.fRtsControl       = RTS_CONTROL_ENABLE;
   dcb.fAbortOnError     = FALSE;
   dcb.wReserved         = 0; // muss immer "0" sein!


   // neue Parameter in die Struktur kopieren (Baud: z.B. 9600)
   dcb.BaudRate = nBaud;
   // neue Parameter in die Struktur kopieren (Bits: z.B. 7 oder 8)
   dcb.ByteSize = (BYTE)nBits;
   // neue Parameter in die Struktur kopieren (Parität:(siehe MSDN))
   dcb.Parity   = (BYTE)nParity;
   // Anzahl Stoppbits (siehe MSDN)
   dcb.StopBits = (BYTE)nStopp;
   dcb.fParity = (dcb.Parity != NOPARITY);

   // neue Parameter setzen. Bei Fehler ist hier Schluss!
   if (!SetCommState (hComm, &dcb))
   {
      Error("SetComState");
      
      return NULL;
   }

   return hComm;
}
 
Zurück