Quidoff
Lieutenant
- Registriert
- Feb. 2005
- Beiträge
- 897
Um unter Windows 2000/XP direkt auf meinen Parallel Port (Adresse 0x378) zugreifen zu können, brauche ich eine spezielle DLL, die mir den direkten Zugriff auf diese Ports gestattet. Eine solche DLL habe ich auch schon gefunden.
Inpout32.dll
Diese DLL exportiert zwei Funktionen (Out32 und Inp32).
Out32 schreibt Daten auf den Port. Die Definition ist. void Out32(short adresse, short data);
Inp32 liest Daten von einem Port. Diese Funktion brauch ich zunächst nicht.
Ich habe ein Programm geschrieben, das soweit auch erstmal funktioniert (habe es mit LED's am Parallel Port in der Schule getestet). In meinem Programm habe ich die DLL dynamisch geladen. Das will ich jetzt auch statisch probieren. (Ich benutze Dev-C++ 4.9.9.2 mit mingw Compiler)
Soviel habe ich bis jetzt gemacht:
Aus der DLL eine def Datei erzeugt mit
pexports ist Teil der minGW utilities.
Das ist der Inhalt der def Datei:
Anschließend muss ich daraus die import library für Dev-C++ erstellen.
Mit folgendem Befehl:
Die Datei io.a (2.802 Bytes) wird gelinkt.
Und das ist der Code:
Ausgegeben wird folgendes:
Nach dem Drücken von [Enter] gibts dann auch noch nen Fehler "Das Programm hat einen Fehler verursacht und muss beendet werden."
Warum wird das i verändert? Ich denke es hat was mit der Größe der Parameter zu tun. Bin mir aber nicht sicher.
Wie gesagt dynamisch (das auskommentierte) funktioniert es perfekt.
Inpout32.dll
Diese DLL exportiert zwei Funktionen (Out32 und Inp32).
Out32 schreibt Daten auf den Port. Die Definition ist. void Out32(short adresse, short data);
Inp32 liest Daten von einem Port. Diese Funktion brauch ich zunächst nicht.
Ich habe ein Programm geschrieben, das soweit auch erstmal funktioniert (habe es mit LED's am Parallel Port in der Schule getestet). In meinem Programm habe ich die DLL dynamisch geladen. Das will ich jetzt auch statisch probieren. (Ich benutze Dev-C++ 4.9.9.2 mit mingw Compiler)
Soviel habe ich bis jetzt gemacht:
Aus der DLL eine def Datei erzeugt mit
Code:
pexports -o inpout32.dll > io.def
Das ist der Inhalt der def Datei:
Code:
LIBRARY INPOUT32.dll
EXPORTS
Inp32 @1
Out32 @2
Anschließend muss ich daraus die import library für Dev-C++ erstellen.
Mit folgendem Befehl:
Code:
dlltool --def io.def --dllname inpout32.dll --output-lib io.a
Und das ist der Code:
PHP:
#include <iostream>
#include <windows.h>
using namespace std;
//typedef void _stdcall (*Out32)(short a, short b);
extern "C" __cdecl void Out32(short PortAddress, short data);
int main() {
//HINSTANCE hLib = LoadLibrary("inpout32.dll");
//Out32 outport = (Out32) GetProcAddress(hLib, "Out32");
SetConsoleTitle("huhn");
cout << "short: " << sizeof(short) << "bytes" << endl;
int i=0;
for(;i<10;i++) {
cout << i << endl;
Out32(0x0378, 0);
//(outport)(0x378, i);
}
cout << i;
cin.get();
cin.get();
return 0;
}
Ausgegeben wird folgendes:
Code:
short: 2bytes
0
1
2
3
4
11
Warum wird das i verändert? Ich denke es hat was mit der Größe der Parameter zu tun. Bin mir aber nicht sicher.
Wie gesagt dynamisch (das auskommentierte) funktioniert es perfekt.
Zuletzt bearbeitet: