<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[LPT unter Windows XP ansteuern]]></title><description><![CDATA[<p>Hallo,<br />
ich muss ein Programm machen, mit dem ich die LPT-Schnittstelle unter Windows XP ansteuern kann. Das das seit Windows NT nicht mehr ohne Umwege geht habe ich schon gelesen und deswegen habe ich mir das hier mal angeschaut:<br />
<a href="http://www.logix4u.net/inpout32.htm" rel="nofollow">http://www.logix4u.net/inpout32.htm</a></p>
<p>Mit dem Beispielprogramm dazu von hier:<br />
<a href="http://www.hytherion.com/beattidp/comput/pport.htm" rel="nofollow">http://www.hytherion.com/beattidp/comput/pport.htm</a></p>
<p>geht es aber nicht.</p>
<p>Ich habe das Programm in eine GUI-Anwendung umgeschrieben. Hier der Code:</p>
<pre><code>//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#include &lt;windows.h&gt;
#pragma hdrstop

#define PPORT_BASE 0x378

#include &quot;LPT_GUI_U.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;

// Funktionsprototypen
typedef short (_stdcall *inpfuncPtr)(short portaddr);
typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum);

// Pointer
inpfuncPtr inp32fp;
oupfuncPtr oup32fp;

// Wrapper-Funktionen
short Inp32(short portaddr)
{
  return (inp32fp)(portaddr);
}

void Out32(short portaddr, short datum)
{
  (oup32fp)(portaddr,datum);
}

bool fehler = false;

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btBeendenClick(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btSchreibenClick(TObject *Sender)
{
  /*short signal = StrToInt(edSchreiben-&gt;Text);
  int port;

  port = PPORT_BASE;

  // Datenregister schreiben
  Out32(port,signal);
  lbAusgabe-&gt;Items-&gt;Add(&quot;Schreibe: &quot; + IntToStr(signal));

  // Zur Überprüfung lesen
  signal = Inp32(port);
  lbAusgabe-&gt;Items-&gt;Add(&quot;Lese: &quot; + IntToStr(signal));
  lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);*/

  unsigned long NumBytesWritten; 
unsigned char Data = 0x00; 

HANDLE Lpt1Han = CreateFile(&quot;\\\\.\\LPT1&quot;, 
                             GENERIC_WRITE, 
                             0, 
                             NULL, 
                             OPEN_EXISTING, 
                             0, 
                             NULL); 
  if (Lpt1Han) 
  { 
    WriteFile(Lpt1Han, &amp;Data, 1, &amp;NumBytesWritten, NULL); 
    CloseHandle(Lpt1Han); 
  } 
  else 
    MessageDlg(&quot;Konnte LPT1 nicht öffnen&quot;,mtError, TMsgDlgButtons()&lt;&lt; mbOK,0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  // DLL laden
  HINSTANCE hLib = LoadLibrary(&quot;inpout32.dll&quot;);
  if(hLib == NULL)
  {
    lbAusgabe-&gt;Items-&gt;Add(&quot;Fehler beim Laden der DLL&quot;);
    fehler = true;
  }
  else lbAusgabe-&gt;Items-&gt;Add(&quot;DLL erfolgreich geladen&quot;);
  lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);

  // Prozessadressen laden
  inp32fp = (inpfuncPtr) GetProcAddress(hLib, &quot;Inp32&quot;);
  if(inp32fp == NULL)
  {
    lbAusgabe-&gt;Items-&gt;Add(&quot;Fehler beim Laden der Input-Prozessadresse&quot;);
    fehler = true;
  }
  oup32fp = (oupfuncPtr) GetProcAddress(hLib, &quot;Out32&quot;);
  if(oup32fp == NULL)
  {
    lbAusgabe-&gt;Items-&gt;Add(&quot;Fehler beim Laden der Output-Prozessadresse&quot;);
    fehler = true;
  }
  if(!fehler) lbAusgabe-&gt;Items-&gt;Add(&quot;Prozessadressen erfolgreich geladen&quot;);
  lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);

  // Port-Adresse ausgeben
  lbAusgabe-&gt;Items-&gt;Add(&quot;Port-Adresse: &quot; + IntToStr(PPORT_BASE));
  lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);

  // Initialisierung testen
  if(!fehler) lbAusgabe-&gt;Items-&gt;Add(&quot;Initialisierung ergfolgreich&quot;);
  else lbAusgabe-&gt;Items-&gt;Add(&quot;Initialisierung nicht ergfolgreich&quot;);
  lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::btReadClick(TObject *Sender)
{
  short signal;
  int port;

   for(port=PPORT_BASE; (port&lt;(PPORT_BASE+8)); port++) {
        signal = Inp32(port);
        lbAusgabe-&gt;Items-&gt;Add(&quot;Lese: &quot; + IntToStr(signal));
   }
   lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);
}
//---------------------------------------------------------------------------
</code></pre>
<p>Mit der Original-Funktion von der Seite ging es auch nicht und dementsprechend damit auch nicht, obwohl die DLL im Projektverzeichnis liegt. (Ist das nicht der Fall zeigt er auch Fehler an)<br />
Die Pins 2 - 9 stehen (nachgemessen) immer alle auf logisch 1 - was er beim lesen über die Dezimalzahl 255 auch anzeigt - aber nach dem schreiben ändert sich das nicht.</p>
<p>Was mache ich falsch?</p>
<p>P.S.: Wenn ich den Code im btWrite durch den in der FAQ ersetze geht es auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170889/lpt-unter-windows-xp-ansteuern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 27 Jun 2026 13:44:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170889.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Jan 2007 16:28:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to LPT unter Windows XP ansteuern on Sat, 20 Jan 2007 16:28:49 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich muss ein Programm machen, mit dem ich die LPT-Schnittstelle unter Windows XP ansteuern kann. Das das seit Windows NT nicht mehr ohne Umwege geht habe ich schon gelesen und deswegen habe ich mir das hier mal angeschaut:<br />
<a href="http://www.logix4u.net/inpout32.htm" rel="nofollow">http://www.logix4u.net/inpout32.htm</a></p>
<p>Mit dem Beispielprogramm dazu von hier:<br />
<a href="http://www.hytherion.com/beattidp/comput/pport.htm" rel="nofollow">http://www.hytherion.com/beattidp/comput/pport.htm</a></p>
<p>geht es aber nicht.</p>
<p>Ich habe das Programm in eine GUI-Anwendung umgeschrieben. Hier der Code:</p>
<pre><code>//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#include &lt;windows.h&gt;
#pragma hdrstop

#define PPORT_BASE 0x378

#include &quot;LPT_GUI_U.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;

// Funktionsprototypen
typedef short (_stdcall *inpfuncPtr)(short portaddr);
typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum);

// Pointer
inpfuncPtr inp32fp;
oupfuncPtr oup32fp;

// Wrapper-Funktionen
short Inp32(short portaddr)
{
  return (inp32fp)(portaddr);
}

void Out32(short portaddr, short datum)
{
  (oup32fp)(portaddr,datum);
}

bool fehler = false;

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btBeendenClick(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btSchreibenClick(TObject *Sender)
{
  /*short signal = StrToInt(edSchreiben-&gt;Text);
  int port;

  port = PPORT_BASE;

  // Datenregister schreiben
  Out32(port,signal);
  lbAusgabe-&gt;Items-&gt;Add(&quot;Schreibe: &quot; + IntToStr(signal));

  // Zur Überprüfung lesen
  signal = Inp32(port);
  lbAusgabe-&gt;Items-&gt;Add(&quot;Lese: &quot; + IntToStr(signal));
  lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);*/

  unsigned long NumBytesWritten; 
unsigned char Data = 0x00; 

HANDLE Lpt1Han = CreateFile(&quot;\\\\.\\LPT1&quot;, 
                             GENERIC_WRITE, 
                             0, 
                             NULL, 
                             OPEN_EXISTING, 
                             0, 
                             NULL); 
  if (Lpt1Han) 
  { 
    WriteFile(Lpt1Han, &amp;Data, 1, &amp;NumBytesWritten, NULL); 
    CloseHandle(Lpt1Han); 
  } 
  else 
    MessageDlg(&quot;Konnte LPT1 nicht öffnen&quot;,mtError, TMsgDlgButtons()&lt;&lt; mbOK,0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  // DLL laden
  HINSTANCE hLib = LoadLibrary(&quot;inpout32.dll&quot;);
  if(hLib == NULL)
  {
    lbAusgabe-&gt;Items-&gt;Add(&quot;Fehler beim Laden der DLL&quot;);
    fehler = true;
  }
  else lbAusgabe-&gt;Items-&gt;Add(&quot;DLL erfolgreich geladen&quot;);
  lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);

  // Prozessadressen laden
  inp32fp = (inpfuncPtr) GetProcAddress(hLib, &quot;Inp32&quot;);
  if(inp32fp == NULL)
  {
    lbAusgabe-&gt;Items-&gt;Add(&quot;Fehler beim Laden der Input-Prozessadresse&quot;);
    fehler = true;
  }
  oup32fp = (oupfuncPtr) GetProcAddress(hLib, &quot;Out32&quot;);
  if(oup32fp == NULL)
  {
    lbAusgabe-&gt;Items-&gt;Add(&quot;Fehler beim Laden der Output-Prozessadresse&quot;);
    fehler = true;
  }
  if(!fehler) lbAusgabe-&gt;Items-&gt;Add(&quot;Prozessadressen erfolgreich geladen&quot;);
  lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);

  // Port-Adresse ausgeben
  lbAusgabe-&gt;Items-&gt;Add(&quot;Port-Adresse: &quot; + IntToStr(PPORT_BASE));
  lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);

  // Initialisierung testen
  if(!fehler) lbAusgabe-&gt;Items-&gt;Add(&quot;Initialisierung ergfolgreich&quot;);
  else lbAusgabe-&gt;Items-&gt;Add(&quot;Initialisierung nicht ergfolgreich&quot;);
  lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::btReadClick(TObject *Sender)
{
  short signal;
  int port;

   for(port=PPORT_BASE; (port&lt;(PPORT_BASE+8)); port++) {
        signal = Inp32(port);
        lbAusgabe-&gt;Items-&gt;Add(&quot;Lese: &quot; + IntToStr(signal));
   }
   lbAusgabe-&gt;Items-&gt;Add(&quot;--------------------&quot;);
}
//---------------------------------------------------------------------------
</code></pre>
<p>Mit der Original-Funktion von der Seite ging es auch nicht und dementsprechend damit auch nicht, obwohl die DLL im Projektverzeichnis liegt. (Ist das nicht der Fall zeigt er auch Fehler an)<br />
Die Pins 2 - 9 stehen (nachgemessen) immer alle auf logisch 1 - was er beim lesen über die Dezimalzahl 255 auch anzeigt - aber nach dem schreiben ändert sich das nicht.</p>
<p>Was mache ich falsch?</p>
<p>P.S.: Wenn ich den Code im btWrite durch den in der FAQ ersetze geht es auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213270</guid><dc:creator><![CDATA[RADS]]></dc:creator><pubDate>Sat, 20 Jan 2007 16:28:49 GMT</pubDate></item><item><title><![CDATA[Reply to LPT unter Windows XP ansteuern on Sat, 20 Jan 2007 17:09:18 GMT]]></title><description><![CDATA[<p>Mir ist gerade aufgefallen, dass in meinem Gerätemanager der LPT gar nicht angezeigt wird. Kann es damit was zu tun haben? Wieso wird er da nicht angezeigt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213298</guid><dc:creator><![CDATA[RADS]]></dc:creator><pubDate>Sat, 20 Jan 2007 17:09:18 GMT</pubDate></item><item><title><![CDATA[Reply to LPT unter Windows XP ansteuern on Sat, 20 Jan 2007 17:52:21 GMT]]></title><description><![CDATA[<p>Ich Idiot <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Es ging nur nicht, weil ich vor Monaten mal den LPT im BIOS deaktiviert habe, weil ich dachte ich brauche ihn nicht ...</p>
<p>Jetzt gehts <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213319</guid><dc:creator><![CDATA[RADS]]></dc:creator><pubDate>Sat, 20 Jan 2007 17:52:21 GMT</pubDate></item><item><title><![CDATA[Reply to LPT unter Windows XP ansteuern on Sat, 20 Jan 2007 17:56:45 GMT]]></title><description><![CDATA[<p>Im BIOS deaktiviert?<br />
//Edit: zu langsam, aber korrekte Vermutung. Ich bin soooo gut...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213323</guid><dc:creator><![CDATA[der_andi]]></dc:creator><pubDate>Sat, 20 Jan 2007 17:56:45 GMT</pubDate></item></channel></rss>