Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Port über CreateFile (https://www.delphipraxis.net/17185-port-ueber-createfile.html)

Borti 29. Feb 2004 17:49


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: 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

Luckie 1. Mär 2004 12:05

Re: Port über CreateFile
 
Was für ein Betriebssystem?

Borti 1. Mär 2004 18:40

Re: Port über CreateFile
 
Schreiben wollt ich es unter 98, aber nutzen wollt ich das Programm auch unter allen anderen Versionen.
Gruß,
Borti

Luckie 1. Mär 2004 18:47

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.

Borti 2. Mär 2004 18:01

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.

Luckie 2. Mär 2004 19:22

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...

Borti 10. Mär 2004 11:12

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

Assarbad 16. Mär 2004 21:11

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

Borti 24. Mär 2004 08:56

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