AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Port über CreateFile

Ein Thema von Borti · begonnen am 29. Feb 2004 · letzter Beitrag vom 24. Mär 2004
Antwort Antwort
Borti

Registriert seit: 11. Okt 2003
151 Beiträge
 
#1

Port über CreateFile

  Alt 29. Feb 2004, 17:49
Hallo!
ihr habt mir vor kurzem geraten meinen LPT-Port über die Win32API zu steuern. so, jetzt hab ich mich mal in die API eingelesen und hier und da im netz gestöbert. ein wunderschönes beispiel zum steuern des Com-Ports hab ich hier gefunden: http://www.swissdelphicenter.ch/de/showcode.php?id=841
In abgeänderter Version für den LPT sieht das ganze dann so aus:
Delphi-Quellcode:
function OpenLPTPort: Boolean;
var
  DeviceName: array[0..80] of Char;
begin
  StrPCopy(DeviceName,'LPT1');
  LPTFile := CreateFile(DeviceName,
    GENERIC_READ or GENERIC_WRITE,
    0,
    nil,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    0);
  if LPTFile = INVALID_HANDLE_VALUE then
    Result := False
  else
    Result := True;
end;

procedure CloseLPTPort;
begin
 CloseHandle(LPTFile);
end;

function ReadText: string;
var
  d: array[1..80] of Char;
  s: string;
  BytesRead:DWord;
  i: Integer;
begin
  Result := '';
  if not ReadFile(LPTFile, d, SizeOf(d), BytesRead, nil) then
  begin
    showmessage('ERROR while reading from LPT1!');
  end;
  s := '';
  for i := 1 to BytesRead do s := s + d[I];
  Result := s;
end;

procedure SendText(s: string);
var
  BytesWritten: DWORD;
begin
  s := s + #13 + #10;
  WriteFile(LPTFile, s[1], Length(s), BytesWritten, nil);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
 if OpenLPTPort=false then showmessage('ERROR while opening handle!');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 try
  CloseLPTPort;
  except
   showmessage('ERROR while closing handle!');
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 panel1.Caption:=ReadText;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 try
  Sendtext(edit1.text);
 except
  showmessage('ERROR while sending to LPT1!');
 end;
end;
Das einzige Problem: Es funktioniert nicht! (Nicht mal das Orginal hab ich zum Laufen gebracht.) Nirgends erhalte ich eine exception oder ähnliches, daher dürfte es ja rein theoretisch geklappt haben.
Aber: Beim Schreiben kann ich keine Veränderung an der Schnittstelle feststellen und beim schreiben erhalt ich auch nur den string''. Könnt ihr mir hier sagen, was falsch ist?
Danke,
Borti
Ich hab's versucht
(auch wenn's nicht so aus sieht)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Port über CreateFile

  Alt 1. Mär 2004, 12:05
Was für ein Betriebssystem?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Borti

Registriert seit: 11. Okt 2003
151 Beiträge
 
#3

Re: Port über CreateFile

  Alt 1. Mär 2004, 18:40
Schreiben wollt ich es unter 98, aber nutzen wollt ich das Programm auch unter allen anderen Versionen.
Gruß,
Borti
Ich hab's versucht
(auch wenn's nicht so aus sieht)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Port über CreateFile

  Alt 1. Mär 2004, 18:47
Unter Windows NT ff. brauchst du einen Treiber. Und den kannst du nicht mit Delphi schreiben. Bei Torry gibt es aber Komponenten mit einer Treiber DLL für solche Sachen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Borti

Registriert seit: 11. Okt 2003
151 Beiträge
 
#5

Re: Port über CreateFile

  Alt 2. Mär 2004, 18:01
Ich weiß, dass das mit NT ff. so eine Sache ist. Mir wurde aber gesagt, ich könnt das auch über die Win32Api hinkriegen.
Ich hab's versucht
(auch wenn's nicht so aus sieht)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Port über CreateFile

  Alt 2. Mär 2004, 19:22
Logisch, wie sonst. Oder kennst du noch eine andere Schnittstelle zu Windows für Programme? Nur unter NT ff. wirst du einen Treiber brauchen. Und Treiber lassen sich nicht mit Delphi entwickeln. Rest siehe erstes Posting von mir...
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Borti

Registriert seit: 11. Okt 2003
151 Beiträge
 
#7

Re: Port über CreateFile

  Alt 10. Mär 2004, 11:12
Ok, mit Windows NT ff. und einen dementsprechenden Treiber muss ich mich mal kümmern.
Kannst du mir aber helfen das Programm wenigstens für Windows98 flott zu machen?
Danke,
Borti
Ich hab's versucht
(auch wenn's nicht so aus sieht)
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#8

Re: Port über CreateFile

  Alt 16. Mär 2004, 21:11
Mahlzeit, warum bitte soll CreateFile nicht funktionieren? Funktioniert auch auf NT, siehe:
ms-help://MS.PSDK.1033/fileio/base/createfile.htm

IMO sollte man danach mit DeviceIoControl:
ms-help://MS.PSDK.1033/devio/base/deviceiocontrol.htm
das ganze ansteuern können.

MfG
  Mit Zitat antworten Zitat
Borti

Registriert seit: 11. Okt 2003
151 Beiträge
 
#9

Re: Port über CreateFile

  Alt 24. Mär 2004, 08:56
ok, ich frag mich auch warum es nicht laufen sollte, aber fakt ist, dass sich mein pc beim schreiben oder lesen vom lpt immer festfährt.
Gruß,
Borti
Ich hab's versucht
(auch wenn's nicht so aus sieht)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz