![]() |
Re: LPT-Port ansteuern [NT!]. Infos und/oder Tester gesucht.
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,
Zitat:
Zitat:
Die eigene Anwendung kann den Treiber dann benutzen (keine Adminrechte mehr notwenig. Dies kann man gut testen, indem man das Beispiel zweimal öffnet, einmal mit Adminrechten und einmal ohne. Zitat:
Zitat:
System stand hier für Betriebssystem. Über den Parallelport kann von einer Hardware ausserhalb des Rechners ein Interrupt im Rechner ausgelöst werden. Das war genau, was ich gemeint habe. Sorry, wenn ich mich nicht klar ausgedrückt habe. Zitat:
Zitat:
Ich habe diese LPT-Port-Ansteuerthemen immer mit viel Interesse verfolgt. Leider kommt oft der Spruch: Das ist ja alles nicht ok u.s.v aber nie kommt mal ein konkreter Vorschlag, wie es sinnvoll geht. Das du das hier jetzt mal ändern willst, finde ich super. Ich denke aber schon, das das Beispiel was ich hier erwähnt habe ganz informativ ist. Sicher dort sind auch diese Direktzugriffe drin (auch) aber dort wird auch endlich mal die winsvc benutzt und speziell CreateService. Oder wie willst du diese Portzugriff konkret realisieren? Welche Delphibefehle benutzen? ich habe das Beispiel mal überarbeitet (goto raus, compiliert jetzt auch unter Delphi7 ohne Fehler/Warnung) MfG Thorsten |
Re: LPT-Port ansteuern [NT!]. Infos und/oder Tester gesucht.
@engine: Leider kann ich das nicht benutzen. Du hast damals offensichtlich schon die DOS-Funktionen benutzt (spezieller Int und vorher Register mit Funktionsindex und Parameter laden). Da du kein IN/OUT in deinem Beispiel nutzt, bringt es erstmal nix. Danke trotzdem für deine Mühe.
Zitat:
Zitat:
Genaugenommen ist es kein direkter Portzugriff, sondern Benutzung der Möglichkeiten, die schon vom Standard-LPT-Treiber seit mind. NT 3.51 zur Verfügung gestellt werden. Im Grunde machen das die DLLs der generischen Porttreiber auch nicht anders, obwohl es da auch diejenigen Treiber gibt, die direkt den Opcode für IN/OUT verwenden (schlecht!), was tabu ist - und jene die READ_PORT_*() benutzen (gut!). Um von der DLL oder einem Programm "direkt" auf einen Treiber zuzugreifen, braucht man sowieso IOCTLs, also DeviceIoControl() - oder eben Ersatzfunktionen. Danke erstmal. Ich schaue mir das an ;) |
Re: LPT-Port ansteuern [NT!]. Infos und/oder Tester gesucht.
Zitat:
Meintest Du mit IN/OUT so etwas?
Delphi-Quellcode:
function PortIn(Addr : Word): Byte; Assembler; StdCall;
asm mov dx, Addr { Adresse in DX schreiben } in al, dx { Port lesen. (AL entspricht Result) } end; procedure PortOut(Addr : Word; Data : Byte); Assembler; StdCAll; asm mov dx, Addr { Adresse nach DX } mov al, Data { Datenbyte nach AL } out dx, al { Port schreiben } end; function ReadMesskarte2(Kanal : byte) : double; (* $2FC = COM2; $3FC = COM1 *) type KAN = array[1..12] of byte; const DIN : array[1..8] of KAN = ((1,1,1,1,0,1,1,1,0,0,0,1), { 1 } (1,1,1,1,0,1,1,1,0,0,1,1), { 2 } (1,1,1,1,0,1,1,1,1,0,0,1), { 3 } (1,1,1,1,0,1,1,1,1,0,1,1), { 4 } (1,1,1,1,0,1,1,1,1,0,1,0), { 5 } (1,1,1,1,0,1,1,1,0,1,1,1), { 6 } (1,1,1,1,0,1,1,1,1,1,0,1), { 7 } (1,1,1,1,0,1,1,1,1,1,1,1) { 8 } ); B : integer = 2048; Ref : double = 5; Vout : double = 0; var i : integer; d : byte; begin Ref := 5; Vout := 0; B := 2048; D := 0; for i := 1 to 12 do begin PortOut($2FC ,($fe and PortIn($2FC))); if DIN[Kanal,13-i] = 0 then PortOut($2FC ,($fd and PortIn($2FC))) else PortOut($2FC ,($2 or PortIn($2FC))); PortOut($2FC ,($1 or PortIn($2FC))); if (PortIn($2fe) and 16) = 16 then D := 0 else D := 1; Vout := Vout +(D*B); B := B div 2; end; ReadMesskarte2 := (Vout / 1023) *Ref /4; PortOut($2FC , ($fd and PortIn($2FC))); PortOut($2FC ,($2 or PortIn($2FC))); end; |
Re: LPT-Port ansteuern [NT!]. Infos und/oder Tester gesucht.
Genau sowas meinte ich ;) ... aber eben als Beispiel für LPT, nicht COM :zwinker:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 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 by Thomas Breitkreuz