Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Cardreader auslesen mit CT-API (https://www.delphipraxis.net/160977-cardreader-auslesen-mit-ct-api.html)

Guido R. 10. Jun 2011 11:47

Cardreader auslesen mit CT-API
 
Hallo !
Ich arbeite derzeit an einem Programm, mit dem ich KVKs und eGKs auslesen muss.
Von der Möglichkeit PC/SC verwenden zu können und somit komfortabel auf die Komponenten von Nobbi zurückgreifen zu können habe ich mich a.G. eines früheren Beitrags (http://www.delphipraxis.net/156839-a...els-pc-sc.html) bereits verabschieded und verwende daher die CT-API.

Derzeitiges Testgerät : Cherry 2052MKT+
CT-API : ctpcsc32kv.dll (Ist trotz "pcsc" im Namen lt. Cherry die korrekte CT-API-DLL)

Die 3 Funktionen der CTAPI binde ich dynamisch ein als :
Delphi-Quellcode:
   
  Type
   TFNCT_init    = function(Ctn:Word; PN:Word):ShortInt;StdCall;
   TFNCT_data    = function(Ctn:Word; Dad:Byte; SAD:Byte; Lc:Word; Cmd:Pointer; Lr:Word; Rsp:Pointer):ShortInt;StdCall;
   TFNCT_close   = function(Ctn:Word):ShortInt;StdCall;
  Var
   CT_Init       : TFNCT_Init;
   CT_Data       : TFNCT_Data;
   CT_Close      : TFNCT_Close;
Dies funktioniert soweit auch. Sowohl CT_Init, als auch CT_Close geben 0=OK zurück.
CT_Data bekomme ich aber einfach nicht zum laufen.

Delphi-Quellcode:
function tKVKReader.ResetCT: ShortInt; {Aufruf aus anderer Funktion zwischen CT_Init und CT_Close ; CTN global def.}
Var command: Array of Byte;
    response: Array of Byte;
    DAD,SAD : Byte;
    LenRes, LenCmd : Word;
begin
 SetLength(Command,5);
 command[0]:=$20;
 command[1]:=$11;
 command[2]:=$00;
 command[3]:=$00;
 command[4]:=$00;

 SetLength(Response,256);

 LenRes := Length(Response);
 LenCmd := Length(Command);

 DAD := $01;
 SAD := $02;

 Result := CT_Data(Ctn,DAD,SAD,LenCmd,Pointer(Command),LenRes,Pointer(response));
 end;
Ich erhalte entweder einen Zugriffsfehler in der DLL oder den Rückgabewert -1="Fehlerhafter Parameter oder Wert",je nachdem, ob ich für DAD den Wert "1" oder "0" setze...

Irgendwie trete ich hier auf der Stelle. Hat jmd. Erfahrung mit der CT-API ?

Gruß
Guido R.

p80286 10. Jun 2011 13:10

AW: Cardreader auslesen mit CT-API
 
Versuch es mal mit Pointer(command[0]), ich meine da war etwas....?
Gruß
K-H

Guido R. 10. Jun 2011 13:24

AW: Cardreader auslesen mit CT-API
 
Hallo K-H!

Geringfügige Verbesserung der Situation : Mit Deiner Änderung kommt immer -1="Fehlerhafter Parameter oder Wert" heraus. - Der Zugriffsfehler ist damit weg.


Gruß
Guido R.

Klaus01 10. Jun 2011 13:40

AW: Cardreader auslesen mit CT-API
 
Hallo,

versuche mal Pointer(response[0])

Grüße
Klaus

p80286 10. Jun 2011 13:58

AW: Cardreader auslesen mit CT-API
 
Zitat:

Zitat von Klaus01 (Beitrag 1105665)
Hallo,

versuche mal Pointer(response[0])

Grüße
Klaus

Meinst Du das ist notwendig?
Gruß
K-H

Klaus01 10. Jun 2011 14:05

AW: Cardreader auslesen mit CT-API
 
Zitat:

Zitat von p80286 (Beitrag 1105671)
Zitat:

Zitat von Klaus01 (Beitrag 1105665)
Hallo,

versuche mal Pointer(response[0])

Grüße
Klaus

Meinst Du das ist notwendig?
Gruß
K-H

.. ich weiß es nicht, deshalb habe ich auch versuche mal geschrieben.

Klaus

Guido R. 10. Jun 2011 14:07

AW: Cardreader auslesen mit CT-API
 
Ist es ! - Ohne ist der Zugriffsfehler wieder da !

Gruß
Guido R.

hoika 10. Jun 2011 17:48

AW: Cardreader auslesen mit CT-API
 
Hallo,

wie ist denn CT_Data definiert

Zitat:

Result := CT_Data(Ctn,DAD,SAD,LenCmd,Pointer(Command),LenRes ,Pointer(response));
Was wäre es mit Result := CT_Data(Ctn,DAD,SAD,LenCmd,@Command[0],LenRes,@response[0]));


Heiko

Klaus01 10. Jun 2011 19:18

AW: Cardreader auslesen mit CT-API
 
Zitat:

Zitat von hoika (Beitrag 1105722)
Hallo,

wie ist denn CT_Data definiert
Heiko

siehe Post #1


Delphi-Quellcode:
  Type
   TFNCT_init = function(Ctn:Word; PN:Word):ShortInt;StdCall;
   TFNCT_data = function(Ctn:Word; Dad:Byte; SAD:Byte; Lc:Word; Cmd:Pointer; Lr:Word; Rsp:Pointer):ShortInt;StdCall;
   TFNCT_close = function(Ctn:Word):ShortInt;StdCall;
  Var
   CT_Init : TFNCT_Init;
   CT_Data : TFNCT_Data;
   CT_Close : TFNCT_Close;
Grüße
Klaus

Klaus01 10. Jun 2011 20:58

AW: Cardreader auslesen mit CT-API
 
Laut diesem Link ist für die eGK eine mindest Firmware Version notwendig. Hast Du diese Firmware?

Hier ist ein Beispiel in VB zu finden.

In C sähe die Funktion so aus: typedef char (*CT_DATA) (USHORT, UCHAR*, UCHAR*, USHORT, UCHAR*, USHORT*, CHAR*);
Quelle: Ein QT Forum

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz