LPT Zugriff Win XP/NT/2000
-
Hi,
entwickle grad ein Programm mit einem Zugriff auf LPT. Das fertige Programm soll unter Win9x und WinNT/2000/XP laufen. Bei letztern, auch Entwicklungssystem habe ich folgendes Problem:
0xC0000096: Privileged instruction. zur Laufzeit.
Habe derzeit kein Win9x-System, daher kann ich nicht garantieren, dass der Fehler dort nicht auftritt.
Das Programm ist eine Konsoleanwendung ohne MFC. Als Funktion zum Zugriff auf LPT verwende ich _inp(378).
Lösungen/Hinweise wenn möglich mit Sourcecode.Danke im Vorraus für eure Hilfe.
So long
Tobias
God bless you
-
Schau Dir mal den FAQ-Beitrag von UnixTom zur seriellen Schnittstelle an: Serielle Daten
Wenn Du die Init-Routine leicht abänderst und in der Klassendeklaration m_fehler auf m_error änderst, solltest das funktionieren.
-
Such mal in der msdn nach
Privileged instruction
ich habe dazu 21 Themen gefunden und einige behandeln sogar dein Problem
-
Hi,
ich hab mir das FAQ angeschaut, nun die Frage an welchen Stellen werden nun Änderungen und vor allen welche von Nöten. Habe bisher noch nicht mit Schnittstellen gearbeitet, daher die Frage. Sourcecode wäre Klasse.
Hier mal die Init aus dem FAQ:
bool CSERIELL::Init(int iPort, int iBaud, int iSize, int iParity, int stopbit, int fRtsControl, int iTimeout, int iTotalTimeout) { char port[]= "COM0123456789:"; sprintf(port, "COM%i:", iPort); m_hPort = CreateFile( port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if((int)this->m_hPort == -1) //COMx ist nicht vorhanden this->m_hPort=0; if(this->m_hPort !=0) { COMMTIMEOUTS comtime; GetCommTimeouts(this->m_hPort, &comtime); comtime.ReadIntervalTimeout= iTimeout; comtime.ReadTotalTimeoutConstant= iTotalTimeout; comtime.WriteTotalTimeoutConstant= iTotalTimeout; comtime.ReadTotalTimeoutMultiplier=2; comtime.WriteTotalTimeoutMultiplier=0; SetCommTimeouts(this->m_hPort, &comtime); DCB dcb; //Gerätekommunikationsanpassung GetCommState(this->m_hPort, &dcb); dcb.BaudRate= iBaud; dcb.ByteSize= iSize; dcb.DCBlength= 28; dcb.EofChar= 0; dcb.ErrorChar= 0; dcb.fRtsControl= fRtsControl; dcb.Parity= iParity; dcb.StopBits= stopbit; dcb.fInX=0; dcb.fOutX=0; dcb.fAbort O n E r r o r = 1; //Bitte hier die leerzeichen // wegmachen. Vermutlich Bug im Forum SetCommState(this->m_hPort, &dcb); return true; } return false; }Danke an alle.
So long
Tobias
God bless you
-
Ein bischen Kreativität und Forschungsgeist musst Du schon mitbringen.
Ich würde auf jeden Fall diese Zeile abändern:sprintf(port, "COM%i:", iPort);Ob Du SetCommState für den Parallelport brauchst, weiß ich nicht. Der Zugriff hat auf jeden Fall bei mir mit dem angegebenen Sourcecode funktioniert (war aber nur ein Minimaltest).