Also ich muß hier doch mal was klar stellen.
Eine DLL ist kein Treiber
Eine DLL sind aus gelager Funktionen die man auf rufen kann.
#include "inpout32.cpp"
wir nie Tun man kann keine cpp dateien include sondern nur header sprich .h dateien.
Wie komme ich an funktionen einer dll:
Es gibt zwei möglichkeiten dynamisch oder statisch.
Die Statische ist das Header file einbinden "incude...."
Und dem linker dann das entsprechende lib file angeben.
Problem an dieser metode ist das das programm bei nicht da sein der
dll einfach nicht starten und man nicht darauf reagieren kann und man das h und das lib file braucht
das dynamische laden:
Code:
extern "C"
{
typedef long (__stdcall *Cherry_Data)(PKBVCardRecord);
typedef long (__stdcall *Cherry_Init)(void);
typedef void (__stdcall *Cherry_Close)(void);
typedef long (__stdcall *Cherry_GetErrorDesc)(long,LPSTR,long);
}
Erzeugen der Funktions Typen
Code:
Cherry_Init G801501_Init;
Cherry_Close G801501_Close;
Cherry_Data G801501_ReadCardRecord;
Cherry_GetErrorDesc G801501_GetErrorDesc;
Erzeugen von Funktionspointer
Code:
m_hCherryDll = LoadLibrary("G8015012.dll");
if (m_hCherryDll != NULL)
{
G801501_Init = (Cherry_Init) GetProcAddress(m_hCherryDll, "G801501_Init");
G801501_Close = (Cherry_Close) GetProcAddress(m_hCherryDll, "G801501_Close");
G801501_ReadCardRecord = (Cherry_Data) GetProcAddress(m_hCherryDll, "G801501_ReadCardRecord");
G801501_GetErrorDesc = (Cherry_GetErrorDesc) GetProcAddress(m_hCherryDll, "G801501_GetErrorDesc");
if (NULL != G801501_Init)
{
Zuweisen der Funktionspointer zu den adressen in der dll.
Code:
long result = G801501_ReadCardRecord(&CardRecord);
Funktionsaufruf
Das beispiel beruht nicht auf der InpOut.dll sonder einer ander der Code war halt gerade greifbar.
Die Dll installiert einen Treiber bei NT Systemen also wird die nur laufen wenn man genung rechte auf dem system hat.
Aufpassen mit der Dll kannst im ganzen Io bereich von windows rum schreiben. das heist richtig müll machen (BlueScreen)
Den die DLL tricks den HAL aus.
Wenn du normale Serial komunikation machen willst und nicht den Parallel port Leitungsweise ansteuern willst brauchst du die dll nicht.
Was hast du genau vor.
Gruß
Lesezeichen