![]() |
Port über CreateFile
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: ![]() In abgeänderter Version für den LPT sieht das ganze dann so aus:
Delphi-Quellcode:
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.
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; 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 |
Re: Port über CreateFile
Was für ein Betriebssystem?
|
Re: Port über CreateFile
Schreiben wollt ich es unter 98, aber nutzen wollt ich das Programm auch unter allen anderen Versionen.
Gruß, Borti |
Re: Port über CreateFile
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.
|
Re: Port über CreateFile
Ich weiß, dass das mit NT ff. so eine Sache ist. Mir wurde aber gesagt, ich könnt das auch über die Win32Api hinkriegen.
|
Re: Port über CreateFile
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...
|
Re: Port über CreateFile
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 |
Re: Port über CreateFile
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 |
Re: Port über CreateFile
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz