inpoutx64 -- LPT in Win_x64

Teilzeitfreak

Grünschnabel
Hallo zusammen,

ich hätte ein paar Fragen zum alten, leidigen Thema der LPT-Port-Programmierung. Allerdings diesmal in einer 64bit-Umgebung. (Nicht dass mich gleich der ein oder andere auf die Suchfunktion des Forums hinweisen will ;-) )
Ich hab bei meinen in VisualStudio geschriebenen Programmen auf meinem alten 32bit WinXP mit der "inpout32.dll" keinerlei Probleme gehapt. Einfach die "inpout32.dll" in das Verzeichnis des *.exe kopiert und es lief.
In meiner Naivität hab ich geglaubt, dass ich die "inpoutx64" von
http://logix4u.net/InpOutBinaries.zip genauso zu handhaben habe, also nur im Code darauf verweisen und die Datei ins *.exe Verzeichnis kopieren. Tja, dachte ich...
Ich hab auch die im Paket enthaltene hwinterfacex64.sys in den Systemordner von Windows kopiert, was leider auch nix gebracht hat. Die Programme stürzen ab...
In dem Paket von logix4u waren auch sowohl für die 32bit, als auch für die 64bit Version noch zwei *.lib Dateien enthalten, deren Nutzen ich nicht verstehe.
Ich wäre sehr dankbar über Beispiele, Anregungen oder weiterführende Fragen, die mich zum Ziel führen.
 
Soll das heißen, du hast die 64b-dll verwendet, aber die 32b-lib drinnengelassen?
da solltest du eigentlich auch die passende lib verwenden
 
ich denke schon. Mein Problem ist, dass ich zwar mitlerweile weiß, dass diese *.lib mit dem Linker zu tun haben (tun sie doch oder?) aber ich wäre sehr dankbar, wenn ich eine verständliche Erklärung bzgl. des Zusammenspiels von *.lib, *.dll und dem Sourcecode bzw. Compiler/Linker bekommen könnte um mal nen Gesamtüberblick zu bekommen.
Ich verwende VisualStudio2008 und mich würde zusätzlich interessieren, wie ich dem Linker mitteile, dass er die 64bit *.lib berücksichtigen soll? Reicht es, wenn ich die *.lib ins lib-Verzeichnis der VS2008-Installation kopiere?

Ich hab das Programm zwar dank einer modifizierten inpout32.dll für WOW64 mittlerweile am Laufen, aber der Ehrgeiz verlangt, dass es auf reinen x64-Sytemen auch laufen soll... ;-)
 
Aalso
Alle vorgefertigten Funktionen, die du verwendest (zB printf und und und)
sind, damit du sie nicht selber schreiben brauchst und sie nicht immer wieder neu kompiliert werden..., in dll's gepackt.

Wenn du jetzt ein Programm schreibst, in so eine dll-Funktion vorkommt, verarbeitet der Compiler nur deinen eigenen Quelltext

Und die Aufgabe des Linkers ist es dann, herauszufinden, in welcher dll printf drinnen ist und das dem kompilierten noch dazuschreiben.

Bei jedem Programmdurchlauf fragt dein Programm jetzt die DLL, was es bei printf zu machen hat, das steht im Programm halt nicht drinnen.

Der Sinn der ganzen Vorrede:
Um herauszufinden, in welcher dll die benötigte Funktionen versteckt sind, braucht der Linker die lib-Dateien, jede dll sollte da eine dabeihaben.

Die lib wird dabei aber nur vom Linker benötigt, zum Starten vom Programm ist dann nur noch die dll selber wichtig.

Ein paar libs (zum Beispiel für printf und die ganze Palette) nimmt der Linker immer Standartmäßig schon dazu, ohne dass du dich darum kümmern musst.

Falls du dich jetzt fragst, wozu jetzt die .h-Dateien gut sind:
Im Prinzip sind sie nur dazu da, um dem Compiler klarzumachen, das er Sachen wie printf nicht lang in deinem Quelltext zu suchen braucht, weil sich der Linker darum kümmert.
(Naja, es gibt schon ein paar andere Zwecke auch noh, die haben aber damit wenig zu tun).

Einbinden von libs:
1) Kopieren in das Lib-Verzeichnis vom VS oder den Projektordner
2) Ob es beim 2008 noch immer so ist, kann ich zwar nicht genau sagen, aber sollte gehen:
#pragma comment(linker , "irgendwas.lib" )
im Quelltext dazuschreiben

Hoffe, ich hab nichts vergessen
Gruß
 
Zurück