Wie sprche ich mit c++ Parallelport an?

moin


Ok, solange ich meine netten 5 Minuten hab hier mal eine ausführliche Erklärung.

Code:
#include <stdio.h>
#include <windows.h>
#include <time.h>
time.h enthällt Funktionen zur Zeiterfassung...
windows.h Enthällt ne Menge Funktionen der WinApi, das sind Funktionen um mit Windows und des Funktionen arbeiten zu können.
stdio.h ist für Ein und Ausgaben.

Code:
//-------------------------------------------------------------------------
typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

void lib_laden();
void pin(int Pin);
void lib_schliessen();

HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;
short x;
int i = 0x378;
//-------------------------------------------------------------------------
void lib_laden ()
{
hLib = LoadLibrary("inpout32.dll");
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
if (hLib == NULL || inp32 == NULL || oup32 == NULL) {/*** ERROR ***/}
}
Hier werden die Funktionen aus der DLL geladen, das muss dich weiter nciht interessieren, du kannst es so übernehmen. int i = 0x378; ist die übliche Adresse des Druckerports, sie weicht manchmal leicht ab, man kann in der Systemsteuerung gucken welche Adresse es ist.

Code:
void pin(int Pin)
{
switch (Pin)
{
case 0: (oup32)(i,0x0); break;
case 1: (oup32)(i,0x1); break;
case 2: (oup32)(i,0x2); break;
case 3: (oup32)(i,0x4); break;
case 4: (oup32)(i,0x8); break;
case 5: (oup32)(i,0x10); break;
case 6: (oup32)(i,0x20); break;
case 7: (oup32)(i,0x40); break;
case 8: (oup32)(i,0x80); break;
}
}
Du Funktion bekommt eine Pinnummer übergeben und gibt ein Signal auf den Pin.

Code:
void lib_schliessen()
{
FreeLibrary(hLib);
}

Schliesst die Dll.


mfg
umbrasaxum
 
Zuletzt bearbeitet:
moin


Mal ein Beispiel wie du das anwenden kannst.
Code:
int main()
{
    int pin = 0;

    lib_laden();
    lib_schliessen();

    printf("Welcher Pin soll aktiviert werden? ");
    scanf("%d", &pin);

    pin(pin);

    return 0;
}


mfg
umbrasaxum
 
Zuletzt bearbeitet:
Tolle Erklärung,

Jedoch, bei deinem Test Programm ist dir ein kleiner Fehler unterlaufen (kommt mir so vor).

Zumindest is dann bei mir ein Fehler aufgetreten.

Du Schließt die DLL noch vor setzen des PIN's dadurch kennt er den Befehl OUT32 nicht mehr und man erhält als Fehlermeldung ACCESS VIOLATION

Lösung:

Einfach das schließen der DLL ganz am Ende aufrufen.
 
Zurück