AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CT - Api / Chipkarten

Ein Thema von skullcrusher · begonnen am 22. Okt 2003 · letzter Beitrag vom 28. Okt 2003
Antwort Antwort
Seite 1 von 3  1 23      
skullcrusher

Registriert seit: 22. Okt 2003
Ort: Sulzheim
56 Beiträge
 
Delphi 8 Architect
 
#1

CT - Api / Chipkarten

  Alt 22. Okt 2003, 12:47
Hallo Leute,

ich sitze hier an einem Delphi Projekt und komme einfach nicht so recht
weiter.
Ich muss die Daten einer Chipkarte auslesen ( Krankenkassenkarte )
Eine Verbindung zum Cardreader stelle ich über die bekannte
CT-Api Schnittstelle her.
Die CT-Api dll habe ich eingebunden und über eine import unit die
berühmten Funktionen CT_init, CT_data und CT_close nach
Delphi geholt.
Das alles klappt auch ohne Probleme, daher gehe ich davon aus, das
ich bei der Definition der Funktionen keine Fehler gemacht habe.
Das initalisieren über CT_init und der Close über CT_close funktionieren
auch ohne Probleme.
Nur mit dem CT_data Befehl tue ich mir schwer.
Sobald ich den meiner Meinung nach richtigen Befehl starte bekomme ich
regelmäßig eine Access Violation .
Ich gehe davon aus, daß der Fehler in der Definition des commands liegt.
Laut Beschreibung wird hier ein Zeiger ( Pointer ) auf eine Adresse mit
dem command verlangt. Die Variable soll laut Beschreibung von der Form "byte"
sein.
Also habe ich ein Array of Byte definiert .
Darin dann die einzelnen Hex Angaben ( in der Form $00 ) abgelegt .
In der Doku ist leider nur ein VB Beispiel. Dort wird in der command Sektion
einfach ein Verweis auf das erste Element des Byte Arrays gesetzt.
Also in der Command Sektion einfach command [0] angegeben.
Das funktioniert aber offensichtlich nicht.
Dann versuchte ich, einen Pointer auf das Byte Array zu setzen und diesen anzugeben.
Auch das wurde mit gleicher Fehlermeldung quittiert.
Lange Rede, kurzer Unsinn:
Weiss jemand wie man einen command für die Funktion CT_data richtig angibt ?
Ich bin in Pointersachen leider ziemlich unerfahren.

Bin für jeden Hinweis dankbar,

Bis dann,

Stephan

PS: Wer bis hierhin gelesen hat, bekommt eine öfffentlich Belobigung !
Ich verspreche meine weiteren Beiträge hier werden kürzer !!!
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#2

Re: CT - Api / Chipkarten

  Alt 22. Okt 2003, 13:00
poste mal 'n Stück Code - macht es leichter Käfer zu suchen, auch wenn ich Dir wahrscheinlich nicht helfen kann, so doch für Andere
Gruß
Tim Leuschner
  Mit Zitat antworten Zitat
skullcrusher

Registriert seit: 22. Okt 2003
Ort: Sulzheim
56 Beiträge
 
Delphi 8 Architect
 
#3

Re: CT - Api / Chipkarten

  Alt 22. Okt 2003, 13:07
Hallo Leuselator !

Hm, dachte ich mir ja, Problem ist nur, das ich im Moment den Code zu Hause
habe und hier in der Mittagspause auf der Arbeit sitze.
Schiebe heute abend die Codeparts nach.
Vielleicht fällt Dir ja was dazu ein.

Bis dann,

Stephan
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#4

Re: CT - Api / Chipkarten

  Alt 22. Okt 2003, 14:44
Ich riskiere hier jetzt einfach mal nen Blindschuss... ich habe kein CardTerminal und deshalb auch keine ct-api... Und da das SDK kostenpflichtig zu sein scheint, ist es irgendwie auch nicht so einfach, nähere Informationen zu bekommen.

Das was ich jetzt hier mal testweise zusammengefummelt habe, fusst alles auf Informationen aus diesem Dokument.

Delphi-Quellcode:
// Ich vermute, die Funktionen müssten so oder so ähnlich deklariert sein bzw. werden
function CT_Init(const ctn, pn: Word): ShortInt;
function CT_Data(const ctn: Word; var dad, sad: Byte; const lenc: Word; command: Pointer; var lenr: Word; response: Pointer): ShortInt;
function CT_Close(const ctn: Word): ShortInt;

procedure TestCT;
const OK = 0; // Fehlercodes stehen noch mehr im Dokument
var ctn, lenr: Word;
    dad, sad: Byte;
    command: Array of Byte;
    response: Array[0..1000] of Byte;
    Res: ShortInt;
begin
  ctn := 1;
  // Terminal 1 an Comport 2...
  if CT_Init(ctn, 2) = OK then
  begin
    sad := 2; // Source = Host
    dad := 1; // Destination = Terminal
    lenr := SizeOf(response);
    command[0] := $20; // Commandobytes
    command[1] := $12;
    {...usw...}
    Res := CT_Data(ctn, dad, sad, SizeOf(command), @command, lenr, @response);

    CT_Close(ctn);
  end;
end;
Wie gesagt, ist ein "kalt" geschriebenes Programm, da ich es nicht testen kann.
Ich hoffe, das das eher hilfreich als verwirrend ist - mich würde dann am Ende auch mal interessieren, wie weit ich denn nun daneben lag.

Gruß

Wormid
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
skullcrusher

Registriert seit: 22. Okt 2003
Ort: Sulzheim
56 Beiträge
 
Delphi 8 Architect
 
#5

Re: CT - Api / Chipkarten

  Alt 22. Okt 2003, 22:07
Hallo Wormid,


danke für die rasche und ausführliche Hilfe !
Leider hat es nicht funktioniert.
Wenn ich bei CT_data mein commando[0] durch Dein @commando ersetze
funktioniert zwar die Compilierung aber der Fehler bleibt der gleiche:
"EAccessViolation bei Adresse 10016D9 in Modul CTORG32.DLL"
(Die Dll ist die CT-Api)
Habe ich eine Chance irgendwie zu ermitteln welche Stelle genau den Fehler
verursacht ? In einer Dll wohl weniger oder ?

Hier mein Code mit dem ich es versuche:

************************************************** ********************
procedure TForm1.Button3Click(Sender: TObject);
var
daten:kdaten;
rueckgabe:word;
commando:array of byte;
speicher:array of byte;

begin
// Select file legt die zu empfangende Datensection fest !
setlength(speicher,2);
setlength(commando,8);
commando[0]:=$00;
commando[1]:=$04;
commando[2]:=$00;
commando[3]:=$88;
commando[4]:=$02;
commando[5]:=$3F;
commando[6]:=$00;
rueckgabe:=CT_data(1,02,01,Sizeof(commando),@comma ndo,2,@speicher);
showmessage(inttostr(rueckgabe));
end;
************************************************** *******************

Wie gesagt, davor funktioniert der CT_init, der Terminal sollte also bereit sein.
Die ganze Zeit bin ich davon ausgegangen, daß wenn ich die Funktion aus der Dll
geholt habe und das Programm compiliert bei der Angabe der Parameter kein Fehler
mehr vorliegen kann. Durch Probieren habe ich nun gemerkt, daß man sehr wohl
völlig falsche Parameter definieren kann ( Byte statt Pointer )
und keine Exception beim Programmstart auftritt.
Es könnte also sein das es schon an der Definition liegt.

*****************
function CT_init(ctn:word;pn:word):word;stdcall; external 'CTORG32.DLL'
function CT_data(ctn:word;dad:byte;sad:byte;lenc:word;comma nd:pointer;lenr:word;response:pointer):word;stdcal l;external 'CTORG32.DLL';
function CT_close(ctn:word):shortint;stdcall; external 'CTORG32.DLL'
*****************
´
So langsam werde ich ziemlich hilflos.
Das muss doch irgendwie zu machen sein......


Stephan
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#6

Re: CT - Api / Chipkarten

  Alt 22. Okt 2003, 22:20
Wie sieht das mit der Variable "speicher" aus? Ist die mit 2 Bytes groß genug für die Rückgabe? Außerdem muss "lenr" als Variable übergeben werden, weil CT_Data wohl die tatsächliche länge der Antwort in "speicher" angibt.

Gruß

Wormid


P.S. Ansonsten weiss ich allerdings auch nicht weiterr....
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: CT - Api / Chipkarten

  Alt 23. Okt 2003, 00:41
Zitat:
Delphi-Quellcode:
var
  command: array of byte;
begin
  ...
    Res := CT_Data(ctn, dad, sad, SizeOf(command), @command, lenr, @response);
  ...
end;
SizeOf(Command) = SizeOf(array of Byte) = SizeOf(Pointer) = 4

Statt Sizeof(Command) nimm Length(Command), da Command als dynamisches array of Byte deklariert wurde.

@Command = @Array of Byte = @Pointer = Zeiger auf Zeiger ist ebenfalls falsch. Die CT Library überschreibt somit die internen Verwaltungsdaten des dynamischen Arrays.
Statt @Command benutze bitte @Command[0] oder Pointer(Command).

Gruß Hagen

PS: Ich wusste garnicht das man mir dem CT API Speicherkarten auslesen kann ? Normalerweise konnte man früher nur echte Prozessorkarten über deren ADPU ansprechen !
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#8

Re: CT - Api / Chipkarten

  Alt 23. Okt 2003, 10:12
Öhm... merkt man das, das ich mir im Umgang mit Pointer auch nicht sicher genug bin, um damit auf dem Papier zu programmieren...

Aber man lernt ja nie aus.

Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
skullcrusher

Registriert seit: 22. Okt 2003
Ort: Sulzheim
56 Beiträge
 
Delphi 8 Architect
 
#9

Re: CT - Api / Chipkarten

  Alt 23. Okt 2003, 23:02
Halli Hallo !

@wormid : He, das war doch garnicht so schlecht. Trotzdem Danke ....
@Hagen :
Hm, ich habe Deine Änderungen eingebunden aber die Fehlermeldung bleibt die
gleiche. Da scheint irgendwas generelles nicht zu stimmen.
Hast Du mit der CT-Api gearbeitet ?
Könntest Du mir einfach mal eine Rountine geben wie Du CT_data angesprochen hast ?
Ich komme einfach nicht auf meinen Fehler. Ich schätze mal es ist mittlerweile
ein ganz trivialer, ich komme nur nicht dahinter.

Schon mal Danke,

Stephan
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: CT - Api / Chipkarten

  Alt 24. Okt 2003, 01:07
Nein, ich habe nicht mit der CT API gearbeitet, ich habe sie nur überflogen und analysiert. Für meine Zwecke war sie damals unzureichend und zu kompliziert. Nach meinem Wissenstand konnte die CT API damals überhaupt keine Speicherkarten o.ä. Nicht-Prozessorkarten ansteuern.
Chipkarte ist nicht gleich Chipkarte. Eine Speicherkarte hat ein echt primitiven Aufbau im Vergleich zu Prozessorkarten.


Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 Uhr.
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