|
Registriert seit: 12. Dez 2007 Ort: Nassenfels 11 Beiträge |
#1
Hallo,
ich muß über Delphi eine ID einer Magnetspeicherkarte auslesen. Das Lesegerät hängt auf CommPort 3 und wird über eine DLL des Herstellers angesprochen. Ich bring mit meiner Funktion keinen Wert aus der Dll, der Fehler lautet immer: E2035 Nicht genügend wirkliche Parameter.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; const dieDll = 'H:\DLL_Verbindung\VS_Reader.dll'; function _ReadReaderStartStop(theAuswIDT:PChar; theLength:integer; theTimeOutMilliSeconds:integer):integer; stdcall; external dieDll; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var theAuswIDT: PChar; begin Edit1.Text := _ReadReaderStartStop(theAuswIDT); end; end. Hier die Beschreibung des Herstellers über die Einbindung der DLL in Delphi (is n Haufen Text, wichtig ist aber glaub ich nur der Markierte Text): Bin für jeden Tip dankbar. Viele Grüße aus dem schönen Altmühltal. Benny Es stehen Folgende Funktionen zur Verfügung: _SetIniPath _StartReader _StopReader _ReadReader _ReadReaderStartStop _SetProcedureGetTelegramm _SetClassProcedureGetTelegramm _GetVersion 3.1 _SetIniPath Ohne Funktion, die Informationen zur Initialisierung stehen in der Registry 3.2 _StartReader Deklaration: function _StartReader: integer; stdcall; Keine Übergabeparameter. Rückgabewert: Integer, beinhaltet den ERROR Code. Diese Funktion setzt alle DLL internen Variablen auf Null, i nitialisiert den Leser und startet das Polling. Das Polling ist timergesteuert, es werden keine Threads angelegt. Solange das Polling aktiv ist, kann die Performance der Applikation „leiden“. Mit der Funktion _ReadReader kann die Ausweisnummer abgeholt werden, mit der Funktion _SetProcedureGetTelegramm bzw. _SetClassProcedureGetTelegramm wird die Callback Funktion an die DLL übergeben, wodurch, sobald ein Ausweis gelesen wurde, die Ausweisnummer direkt an die Applikation übergeben wird. 3.3 _StopReader Deklaration: function _StopReader: integer; stdcall; Keine Übergabeparameter. Rückgabewert: Integer, beinhaltet den ERROR Code. Diese Funktion stoppt das Polling. 3.4 _ReadReader Deklaration: function _ReadReader(theAuswIDT: PChar;theLength: integer): integer; stdcall; Übergabeparameter: TheAuswIDT ist ein char Pointer. Die Speichergrösse muss um 1 grösser sein als theLength. Der Leser gibt immer eine 16 stellige Ausweisnummer zurück. theAuswIDT sollte mindestens 17 char lang sein, entsprechend theLength auf 16 stehen. Eine Überprüfung, ob der übergebene Speicherbereich gültig ist, findet in der DLL nicht statt. Rückgabewert: Integer, beinhaltet den ERROR Code. Mit dieser Funktion kann nach _StartReader zu einem beliebigen Zeitpunkt die Ausweisnummer des letzten Lesevorgangs abgeholt werden. 3.5 _ReadReaderStartStop Deklaration: function _ReadReaderStartStop(theAuswIDT: PChar;theLength: integer; theTimeOutMilliSeconds: longint): integer; stdcall; Übergabeparameter: theAuswIDT ist ein char Pointer. Die Speichergrösse muss um 1 grösser sein als theLength. Der Leser gibt immer eine 16 stellige Ausweisnummer zurück. theAuswIDT sollte mindestens 17 char lang sein, entsprechend theLength auf 16 stehen. Eine Überprüfung, ob der übergebene Speicherbereich gültig ist, findet in der DLL nicht statt. theTimeOutMilliSeconds übergibt einen Timoutwert in Millisekunden. Rückgabewert: Integer, beinhaltet den ERROR Code. Mit dieser Funktion wird zunächst die Funktion _StartReader aufgerufen. Anschliessend wartet die Funktion auf einen Lesevorgang. Erfolgt ein Lesevorgang innerhalb der theTimeOutMilliSeconds Zeit, so wird die Ausweisnummer in die Variable theAuswIDT geschrieben, _StopReader aufgerufen und die Funktion beendet. Wird der Timeout überschritten, so wird kein Fehler (ERROR Code = 0) zurückgegeben, aber theAuswIDT ist ein „NULL String“.] 3.6 _SetProcedureGetTelegramm Deklaration: procedure _SetProcedureGetTelegramm(theCallBackTelegramm: TCallBackTeleg; theTelegramm: PChar;theSize: integer); stdcall; TCallBackTeleg = procedure(theTele: PChar; theErrorCode: integer) ; cdecl; Übergabeparameter: theCallBackTelegramm ist die Procedure welche von der DLL nach dem Lesen einer Karte aufgerufen wird. ã2003 primion Technology AG Implementierung der VS-READER.DLL Seite: 5 Version 01.02.01 vom 25.04.2003 theTelegramm ist ein char Pointer. Die Speichergrösse muss um 1 grösser sein als theSize. An dieser Speicheradresse wird von der DLL die Ausweisnummer abgelegt. Der Leser gibt immer eine 16 stellige Ausweisnummer zurück. In der Applikation muss die Procedure TcallBackTeleg deklariert werden. Die DLL gibt mit theTele die Adresse von theTelegramm zurück. Mit theErrorCode wird ein eventueller Fehler zurückgegeben. Rückgabewert: Keiner. Diese Procedure wird von Applikationen die mit Microsoft Developer Studio (C++) erstellt werden verwendet 3.7 _SetClassProcedureGetTelegramm Deklaration: procedure _SetClassProcedureGetTelegramm (theCallBackTelegramm: TCallBackClassTeleg; theTelegramm: PChar;theSize: integer); stdcall; TCallBackClassTeleg= procedure(theTele: PChar; theErrorCode: integer) ; of object; Übergabeparameter: theCallBackTelegramm ist die Procedure welche von der DLL nach dem Lesen einer Karte aufgerufen wird. theTelegramm ist ein char Pointer. Die Speichergrösse muss um 1 grösser sein als theSize. An dieser Speicheradresse wird von der DLL die Ausweisnummer abgelegt. Der Leser gibt immer eine 16 stellige Ausweisnummer zurück. In der Applikation muss die Procedure TCallBackClassTeleg deklariert werden. Die DLL gibt mit theTele die Adresse von theTelegramm zurück. Mit theErrorCode wird ein eventueller Fehler zurückgegeben. Rückgabewert: Keiner. Diese Procedure wird von Applikationen die mit Delphi erstellt werden verwendet. 3.8 _GetVersion Deklaration: procedure _GetVersion(theVersion: PChar); stdcall; Übergabeparameter: TheVersion ist ein char Pointer. An diese Adresse schreibt die DLL den Versionsstring. Es ist darauf zu achten, dass für theVersion genügend Speicher reserviert wird, eine Prüfung des Speicherbereiches findet in der DLL nicht statt. Rückgabewert: Keiner. ã2003 primion Technology AG Implementierung der VS-READER.DLL Seite: 6 Version 01.02.01 vom 25.04.2003 Die Version zum Zeitpunkt der Erstellung dieser Dokumentation ist “01.02.00“. Der Versionsstring ist somit 8 Zeichen lang, im Speicher müssen mindesten 9 Zeichen reserviert sein. 4 Fehlermeldungen Die implementierten Fehlermeldungen beschränken sich auf Fehler in der Kommunikation zum Kartenleser und auf Fehler am Kartenleser selbst. Die Fehler Codes: 0 Kein Fehler 1 Checksumme falsch 2 Startzeichen Telegramm unbekannt(bekannt: ACK,SOH und STX, NAK,DC4) 3 NAK empfangen 4 Unbekannter Fehler 5 Keine Antwort auf das Polling 6 Connect- oder Leserinitialisierungsfehler 7 Lesefehler: Der Leser konnte die Karte nicht richtig lesen. 5 Einträge in der Registry Für die Einträge in der Registry steht die Datei VS_READER_DLL.REG zur Verfügung. Der Inhalt: [HKEY_LOCAL_MACHINE\SOFTWARE\primion Technology AG\READER] "CardIDMask"="XXXXXXXXXXXXXXXX" Die Nummer, welche vom Kartenleser übergeben wird, hat 16 Stellen. Mit dem Parameter CardIDMask können einzelne Zeichen „ausgeblendet“ werden „X“ Bedeutet, das Zeichen an dieser Stelle wird verwendet. "CommPort"="1" Mit CommPort wir das Anschlussport für den Kartenleser angegeben. "Reader_type"="13" [ "DIN_MASK"="FFFF00FFFF00" ] entfällt in V01.02.01 "Reader_structure"="00011100" "EC_Filter"="111111111111111100000000" "Creditcard_Filter"="111111111111111100000000" Mit diesen Parametern wird der verwendete Kartenleser definiert. Siehe Beschreibung „Leserdefinitionen“ weiter unten. Der Key „DIN_MASK“ wird nur noch dann verwendet, wenn die Keys „EC_Filter“ und „Creditcard_Filter“ nicht vorhanden oder nicht richtig definiert sind. ã2003 primion Technology AG Implementierung der VS-READER.DLL Seite: 7 Version 01.02.01 vom 25.04.2003 "ConvertToDez"="0" Mit ConvertToDez wird eingestellt, ob der String (ausgehend von der Hexadezimalen Darstellung) in eine Dezimalzahl gewandelt werden soll. Diese Parameter sind für die Entwicklung bestimmt und müssen in den hier angegebenen Werten eingestellt sein. "ExtensionLength"="2" Je nach PC und Protokollart (RS485 oder RS232) kann es sein dass dieser Wert variiert. In den allermeisten Fällen wird der Wert „2“ funktionieren. Wenn Übertragungsfehler auftreten sollten, kann der Wert auf „1“ eingestellt werden. "PollingDelay "="100" In diesem Abstand wird das Polling Telegramm gesendet. "TimeOutDelay"="300" Verzögerung des Polling nach Empfang einesfehlerhaftem Telegrammes. "ReadTeleDelay"="50" Warten auf das Telegramm nach dem Polling. 5.1 Leserdefinitionen 5.1.1 Reader_type Die mit * gekennzeichneten Leser können mit der DLL nicht verwendet werden. 0 Magnetleser / effeff berührungsloser Leser 1 Infrarotleser 2 Wiegandleser 56 Bit 3 Wiegandleser 40 Bit 4 Codatexleser 5 32 Bit Induktivleser 6 65 Bit Induktivleser mit DIN Auswertung 7 65 Bit Induktivleser mit SAV Auswertung 8 65 Bit Induktivleser mit effeff Karten 9 Indalaleser mit Magnetschnittstelle 10 Indalaleser mit Wiegandschnittstelle 11 Nedapleser *12 Handkey Leser 13 Legicleser 14 Chipkartenleser (effeff) 15 KABA Nova Leser 16 Cardkey Leser 17 U-Key Leser 18 Codatex Leser mit DIN Auswertung *19 ET80 *20 BENZING / KABA BEDAS 9120 Leser *21 Giro Vend Leser 22 Wiegandleser 34 Bit 23 Deisterleser 24 Northern - Leser (berührungslos) ã2003 primion Technology AG Implementierung der VS-READER.DLL Seite: 8 Version 01.02.01 vom 25.04.2003 25 Cardkey - Leser berührungslos (von Cotag) 26 Magnetleser mit "SIPASS alt" Codierung 27 Mifare - Leser von Deister 28 Keri – Leser *29 Barcodeleser 30 HID-Leser 35 Bit Codierung 31 HID-Leser 37 Bit Codierung *32 HID-Leser 34 Bit Codierung *33 Telekom für GO und GLAZ Nummer *34 DOM 41 Bit Wiegand *35 effeff RS485 B1 Leser *36 Kobil B1 Leser RS232 37 Deisterleser 46 Bit 38 BVK – Leser 39 KSF - Leser 5.1.2 Reader_Structure Bit 0 Telekom Chipkartenleser mit GO Nummer Bit 1 TN codierte Karten Bit 2 16 (0) oder 24 (1) Zeichen bei Magnet DIN lesen Bit 3 CRC Prüfung bei DIN Karten Bit 4 Einsteckleser (0) / Durchzugsleser (1) Bit 5 Clock / Daten (0) oder Wiegandschnittstelle (1) Bit 6 Rückwärtslesen erlaubt ? Bit 7 Invertiere die Datenleitung (effeff - Leser) Hier wird von rechts nach links gezählt! (.....Bit2 Bit1 Bit0) 5.1.3 DIN_MASK Hier können für EC und Kreditkarten Lesefilter eingegeben werden. Die ersten 6 Zeichen sind für EC- Karten, die folgenden 6 Zeichen sind für Kreditkarten. In den meisten Fällen wird der Defaultwert stimmen! Der Defaultwert ist FFFF00FFFF00. Die DIN_MASK wird nur bei den Lesern 0, 6, 13, 14, 15, 17 und 38 und auch nur bei DIN oder DIN/SAV codierten Karten verwendet. Jedes Zeichen steht für 4 Bits und wird im hexadezimalen Format angegeben. Die Karte liefert 24Byte an den Kartenleser, mit dem Lesefilter kann bestimmt werden, welche 16 Bytes der 24 Bytes als Ausweisnummer verwendet werden. Der Lesefilter wird bitkodiert von links nach rechts gelesen, wobei das erste Bit dem ersten Byte von der Karte entspricht. Eine 1 bedeutet, dieses Byte wird für die Ausweisnummer verwendet, eine 0 bedeutet, dieses Byte wird für die Ausweisnummer nicht verwendet. Allerdings wird bei der Umsetzung von Binär in Hex die Zeichenfolge in 8 Zeichenblöcke aufgeteilt. Das erste Zeichen entspricht Bit0 für die Hexcodierung, das Zweite Bit1 usw. Beispiel: ã2003 primion Technology AG Implementierung der VS-READER.DLL Seite: 9 Version 01.02.01 vom 25.04.2003 Lesefilter EC-Karte: 0011 0110 1111 1010 1100 1111 Hieraus wird: 01101100 01011111 11110011 DIN_MASK Teil 1: 6C5FF3 Lesefilter Kreditkarte: 0101 1010 1100 1111 1101 1011 Hieraus wird: 01011010 11110011 11011011 DIN_MASK Teil 2: 5AF3DB DIN_MASK: : 6C5FF35AF3DB Auch in der DLL Version 10.02.01 bleibt dies erhalten. Auch der Key wird aus der Registry gelesen, es sei denn die beiden folgenden Keys sind in der Registry richtig eingetragen 5.1.3.1 EC_Filter Hier wird der Lesefilter für EC- Karten eingetragen. Der Lesefilter wird bitkodiert von links nach rechts gelesen, wobei das erste Bit dem ersten Byte von der Karte entspricht. Eine 1 bedeutet, dieses Byte wird für die Ausweisnummer verwendet, eine 0 bedeutet, dieses Byte wird für die Ausweisnummer nicht verwendet. 5.1.3.2 Creditcard_Filter Hier wird der Lesefilter für Kreditkarten eingetragen. Die vorgehensweise ist gleich wie bei „EC_Filter“. 6 Anlagen Dieser Dokumentation sind beigefügt: READER_DLL.H READER_DLL.CPP VS_READER_DLL.REG VS_READER.DLL Die READER_DLL.H Datei enthält alle notwendigen Deklarationen und Definitionen um die DLL in eine Applikation zu integrieren. Ausserdem steht hier die Deklaration einer Beispielklasse. In der READER_DLL.CPP steht die Implementierung der Beispielklasse. VS_READER_DLL.REG enthält die Eintragungen für die Registry VS_READER.DLL in der Version 01.02.00 |
![]() |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
LinkBack |
![]() |
![]() |