Hallo erst mal.
Ich versuche nun seit geraumer Zeit zugriff auf meinen Parallelport zu bekommen. Unter Win98 war das kein Problem.
Aber mit 2000 wird alles schwerer.
Ich will keine Treiber und ich will auch keine Dlls oder irgendwelche free- oder shareware.
Auch emulatoren sind ausgeschlossen.
letztens habe in der
Unit Windows Createfile und Writefile entdeckt. Doch irgendwie tuts nicht. Es kann zwar die schnittstelle geöffnet werden aber beim Senden/ Empfangen von Daten hängt sich das Prog auf (wartet wahrscheinlich auf eine HArdwareseitige Rückmeldung oder spricht nicht einmal meinen Parallelport an
).
kann mir jemand sagen warum mein Versuch fehlschlägt ?
Ich habe auch schon ein Hardware-interface mit folgenden Brücken getestet, vergebens:
1 (data strobe) ---> 10 (Ack)
11(busy) , 12(paper end), 17(select inhibit) --> Ground
13(select) --> 15(!error) --Tied together, but floating
die
Unit mit der Kompo schaut so aus
Delphi-Quellcode:
unit LPT;
interface
uses
Windows, Messages,SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;
Type TLPTPort =
Class
procedure Open;
procedure Close;
function Read: Cardinal;
procedure Write(alldata: Longword);
public
port : THandle;
// DWord
end;
implementation
procedure TLPTPort.Open;
begin
port :=
CreateFile(
'
LPT1',
//IpFilename : PansiChar
GENERIC_READ
or GENERIC_WRITE,
//dwdesiredAccess : Cardinal
0,
//dwSharedMemory : Cardinal
nil,
//IpSecurityAttributes : PSecurityattributes
OPEN_EXISTING,
//dwCreationDisposition : Cardinal
0,
//dwFlagsAndAttributes : Cardinal
0,
//hTempalateFile : Cardinal
);
if port = INVALID_HANDLE_VALUE
then Showmessage('
Es ist ein Fehler beim Öffnen der Schnittstelle aufgetreten.'#13#10'
Sie ist schon geöffnet oder belegt.');
end;
procedure TLPTPort.Close;
begin
if not CloseHandle(port)
then Showmessage('
Es ist ein Fehler beim Schliessen der Schnittstelle aufgetreten.');
end;
function TLPTPort.
Read: Cardinal;
// 4 bytes mit Offset 0, 1, 2 und unbelegt
var
Success: Boolean;
readbuf: Longword;
bytestoread: Cardinal;
begin
bytestoread:= 3;
Success :=
ReadFile(
port,
//hfile : Cardinal
readbuf,
//buffer untyped
bytestoread,
//nNumberOfBytesToRead : Cardinal
bytestoread,
//var lpNumberOfBytesToRead : Cardinal,
nil //lpOverlapped : POverlapped
);
Result := readbuf;
ShowMessage(booltostr(Success,true)+'
'+inttohex(readbuf,8));
end;
procedure TLPTPort.
Write(alldata: Longword);
var
Success: Boolean;
bytestowrite: Cardinal;
begin
bytestowrite:= 3;
Success :=
WriteFile(
port,
//hfile : Cardinal
alldata,
//buffer untyped
bytestowrite,
//nNumberOfBytesToWrite : Cardinal
bytestowrite,
//var lpNumberOfBytesToWrite : Cardinal,
nil //lpOverlapped : POverlapped
);
ShowMessage(booltostr(Success,true));
end;
end.