![]() |
TSmartCard für Delphi 2010
Hallo #,
bei der Umstellung eines D7-Programmes habe ich ein Problem. Das Programm verwendet die Komponente TSmartCard. Ich habe jetzt die Pas-Quellen (scardcmp.inc) von String auf AnsiString, PChar PAnsiChar geändert. Trotzdem stürzt das Programm beim Beenden des Forms, welches die TSmartCard verwendet ab. Es scheint also doch noch Probleme zu geben. Bei Towotoko finde ich keine D2010 kompatible Version ... ;( Was nun ? Schon mal im voraus Danke für Anregungen/Hilfe. Heiko |
AW: TSmartCard für Delphi 2010
Und sonst funktioniert alles?!
Ich hab nämlich für D2009 u.a. noch folgende Funktionen angepasst:
Delphi-Quellcode:
Vergleichs mal mit deinen :-D Aber ob's daran liegt weiß ich natürlich nicht ...
function TSmartCard.ComandStr(const Cmd,DataIn: AnsiString): AnsiString;
begin if DataIn = '' then begin SetLength(Result, 255); SetLength(Result, Comand(Cmd,nil,0,@Result[1], Length(Result))); end else begin SetLength(Result, 255); SetLength(Result, Comand(Cmd,@DataIn[1],Length(DataIn),@Result[1], Length(Result))); end; end; function TSmartCard.Comand(const Cmd: AnsiString; DataIn: Pointer; DataInLen: LongInt; DataOut: Pointer; DataOutMax: LongInt ): LongInt; var R,L,M: LongInt; C: AnsiString; begin try Result:=DataOutMax; if not FActive then Error('SmartCard component not activated'); L:=Length(Cmd); if L = 0 then R:=FSCardComand(FTDevHandle,nil,L, DataIn,DataInLen,DataOut,Result) else R:=FSCardComand(FTDevHandle,@Cmd[1],L, DataIn,DataInLen,DataOut,Result); if R > 0 then begin Result:=0; C:=cmSystem+cmInfo+cmErrText; L:=Length(C); M:=0; SetLength(FError, 255); R:=Length(FError); FSCardComand(FTDevHandle,@C[1],L,nil,M,@FError[1],R); SetLength(FError, R); Error(FError); end; except Result:=0; if not (csDesigning in ComponentState) then raise; end; end; |
AW: TSmartCard für Delphi 2010
Hallo,
oh ein Gleichgesinnter. Habe das jetzt geändert. Leider funktioniert es immer noch ;( Beim Beenden schmiert das Formular ab. Kannst du mir deine Inc-datei mal per PN geben ? Danke Heiko |
AW: TSmartCard für Delphi 2010
Hallo,
erledigt !!! Musste die Komponente neuinstallieren. 1000 Dank ;) Heiko |
AW: TSmartCard für Delphi 2010
Hallo,
zu früh gefreut ;( Ist kein Lesegerät angeschlossen, stürzt das Programm nach dem Form-Beenden ab. Allerdings nicht in der Debug- sondern nur in der Release-Version. Ich erzeuge die Komponente jetzt dynamisch und gebe sie erst mal nicht frei ;) Heiko |
AW: TSmartCard für Delphi 2010
Mh, ich hatte auch mal ein Problem mit nicht angeschlossenem Kartenleser ... ich glaube das war, weil ich auf DeviceList zugegriffen habe, obwohl Active auf false stand - glaube ich :gruebel:
Vlt. greifst du auch auf etwas zu, was nicht existiert?! |
AW: TSmartCard für Delphi 2010
Hallo,
Das letzte FreeLibrary in SetActive ist der Schuldige. Das habe ich jetzt ausgeklammert und werde mir das später ansehen. Heiko |
AW: TSmartCard für Delphi 2010
AFAICR hatte ich vor zwei Jahren dasselbe Problem mit einem ähnlichen Workaround.
|
AW: TSmartCard für Delphi 2010
Hallo. Ich suche mir seit Wochen schon die Finger wund, weil ich genau das selbe Problem habe. Setze mehrere SCR335 ein und nutzte bisher TSmartCard. Nun setze ich Delphi XE ein und bekomme es nicht gebacken :roll:
Kann mir vielleicht jemand einen Link (oder auch gerne per Mail) posten, wo ich mir mal eine funktionierende Version ziehen kann? Wäre echt supermega..! Tks vorab.. Schorsch |
AW: TSmartCard für Delphi 2010
Nochmal ich,
ich habe jetzt mal versucht die Kompo umzustellen, wie hier weiter oben beschrieben. Aber in der function: SetActive - meckert er mir folgende Zeilen an: if FileSearch(StrPas(@DllFile[1]), ExtractFilePath(ParamStr(0))+'\;'+S+';'+T) <> '' then (Doppeldeutiger oder überladener Aufruf von "StrPas") .. Error('Invalid/missing SmartCard library '+StrPas(@DllFile[1])+ ' (Error code '+IntToStr(FLibHandle)+')'+#13#10+ 'Pls. download latest version at: ![]() (Doppeldeutiger oder überladener Aufruf von "StrPas") .. Error('Invalid SmartCard library '+StrPas(@DllFile[1])+ ' (version mismatch)'+#13#10+ 'Pls. download latest version at: ![]() (Doppeldeutiger oder überladener Aufruf von "StrPas") Hat da vielleicht jemand ne Idee? Obwohl ne aktuelle, lauffähige Kompo wäre natürlich was ;-) Tks vorab und schönes Restwochenende.. Schorsch |
AW: TSmartCard für Delphi 2010
Die DLL-Suche habe ich ebenfalls überarbeitet und überlasse nun LoadLibrary die Arbeit. Aber gut, auch ohne das sollte es ja gehen.
Versuch mal, den Wert vor der Übergabe an StrPas als PAnsiChar zu casten:
Delphi-Quellcode:
:-D
StrPas(PAnsiChar(@DllFile[1]))
|
AW: TSmartCard für Delphi 2010
Liste der Anhänge anzeigen (Anzahl: 1)
Habe mal auf meiner Festplatte gekramt und die Datei im Anhang gefunden. Hilft das?
Bei ![]() |
AW: TSmartCard für Delphi 2010
Hi und Danke erstmal,
habs jetzt kompilieren können. Hab jetzt eine SCARDCMP.INC - aber habe leider keine Ahnung, wie ich das Teil jetzt einbinden muss/zum Laufen bekomme. Könntest du mir da weiterhelfen? Wäre super.. Schorsch |
AW: TSmartCard für Delphi 2010
Uups - eben erst gesehen, dass da noch was kam. Habe mir mal downgeloadet und schaue es mir direkt mal an.
Supi - Danke erstmal - ich winke wieder.. Schorsch |
AW: TSmartCard für Delphi 2010
Hallo nochmal,
ich verzweifle bald :pale: Ich habe jetzt die Kompo zum Laufen gebracht und ein kleines Testprogramm erstellt. Wenn ich das jetzt starte und dann die Kompo auf active setze kommt "..missing SCARD32.DLL". Ich also die aktuellen Treiber runtergeladen und installiert - alles fehlerfrei. Die DLL stellte er mir jetzt nach Windows\SysWOW64. Fehler kam immernoch. Also ich diese in dem Verz per regsvr32 scard32.dll versucht zu registrieren, doch dann kommt ".. Modul wurde geladen der DllRegisterServer-Eingangspunkt wurde nicht gefunden. Stellen Sie sicher, blabla". Könnt ihr euch vorstellen woran das liegt? Danke.. Schorsch |
AW: TSmartCard für Delphi 2010
Pack mal die DLL in das Verzeichnis, in dem deine Anwendung liegt ...
|
AW: TSmartCard für Delphi 2010
hab ich gemacht - geht trotzdem nicht :-(
|
AW: TSmartCard für Delphi 2010
Immer noch der gleiche Fehler, dass er die DLL nicht finden kann? Mh, wie gesagt, das mir der Suche nach der DLL habe ich ebenfalls geändert - sicher nicht ohne Grund, aber welcher das war, weiß ich auch nicht mehr.
|
AW: TSmartCard für Delphi 2010
Nee - klappt immernoch nicht :roll: Vielleicht fällt dir (oder jemand anderem) ja doch nochwas ein.
Wäre super.. Tks trotzdem schonmal.. Schorsch |
AW: TSmartCard für Delphi 2010
Ja was hast du denn geändert?
Bei mir sieht SetActive so aus, wobei die Konstante DllFile vor meiner Änderung DllFile32 oder so ähnlich hieß:
Delphi-Quellcode:
procedure TSmartCard.SetActive(Value: Boolean);
var C,L,I: LongInt; S: AnsiString; begin if Value = FActive then exit; try SetCursor (LoadCursor (0, IDC_WAIT)); if Value then begin if FLibHandle > 0 then FreeLibrary(FLibHandle); FLibHandle:=2; FLibHandle:=LoadLibrary(DllFile); if FLibHandle < HINSTANCE_ERROR then Error('Invalid/missing SmartCard library '+ DllFile + ' (Error code '+IntToStr(FLibHandle)+')'+#13#10+ 'Pls. download latest version at: http://www.towitoko.de'); {$IFDEF SCARDDIR} FSCardComand:=SCardComand; {$ELSE} @FSCardComand:=GetProcAddress(FLibHandle, 'SCardComand'); {$ENDIF} if not Assigned(FSCardComand) then begin FreeLibrary(FLibHandle); FLibHandle:=0; Error('Invalid SmartCard library '+StrPas(PAnsiChar(@DllFile[1]))+ ' (version mismatch)'+#13#10+ 'Pls. download latest version at: http://www.towitoko.de'); end; FTDevHandle:=0; L:=-1; C:=0; S:=cmSystem+cmAddHWndMsg+ IntToStr(FWindowHandle)+','+IntToStr(TDEVMSG)+#0; I:=FSCardComand(L,@S[1],C,nil,C,nil,C); if (I > 0) or (L <= 0) then begin FreeLibrary(FLibHandle); FLibHandle:=0; Error('Cannot access SmartCard Server: '+IntToHex(I,4)); end; FTDevHandle:=L; FActive:=True; GetDeviceList; InsertMenuItems; end else begin try Comand(cmSystem+cmDelHWnd+IntToStr(FWindowHandle),nil,0,nil,0); except end; try Comand(cmSystem+cmDestroy,nil,0,nil,0); except end; FreeLibrary(FLibHandle); FLibHandle:=0; FActive:=False; end; finally Screen.Cursor:=crDefault; end; end; |
AW: TSmartCard für Delphi 2010
Also der Text sieht absolut abders aus als der Meine. Wo bekommst du denn "DllFile" her? Hast du die global definiert?
Hast du denn die Sourcen noch irgendwo auf der Platte rumkreisen und könntest die mir zukommen lassen? Jedenfalls mach ich gleich Feierabend - mache mich aber später daheim nochmal dran. Tks nochmal.. |
AW: TSmartCard für Delphi 2010
Absolut anders? Mh, also ein wenig habe ich schon verändert, aber nicht so gravierend. Scheint, als hätten wir verschiedene Versionen.
Ich habe doch gesagt, dass DllFile die Konstante ist, die bei dir DllFile32 oder so ähnlich heißen müsste. Kann ich machen, musste mir nur mal deine E-Mail-Adresse per PN schicken :wink: |
AW: TSmartCard für Delphi 2010
Hallo nochmal,
also ich habe netterweise die geänderten Sourcen von "Deep-Sea" erhalten und hänge schon den ganzen Tag erfolglos dran die Kompo zum Laufen zu bringen :pale: Ich bekomme die zwar compiliert und auch installiert (Package .. wurde installiert) aber ich sehe einfach keine Kompo auf der Kompo-Leiste :evil: Vielleicht mache ich ja auch einfach nur etwas falsch? Ich gehe auf Komponente, Komponente installieren, in ein neues Package, als Unitname wähle ich die scardc32.pas, Weiter, als Name gebe ich TSmartcard ein, Fertig stellen... ratter, ratter.. TSmartcard.bpl wurde installiert - aber ich seh nix. Auch ein Delphi-Neustart bringt nix. In meinem Delphi 7 ist die auch drin und da wird sie mir auf einem sep. Reiter namens TOWITOKO angezeigt. Gehe ich mit der Maus drüber kommt SmartCard (SCardC32). Vielleicht mache ich das ja auch nur komplett falsch. Jemand noch ne Idee? Tks.. Schorsch |
AW: TSmartCard für Delphi 2010
In neueren Version von Delphi kann man Komponenten ja nur noch in Packages hinzufügen. Und da musst du diese natürlich mittels RegisterComponents registrieren :-D
Z.B. mit Hilfe einer extra Unit im Package:
Delphi-Quellcode:
unit Reg;
interface procedure Register; implementation uses SCardC32; procedure Register; begin RegisterComponents('TOWITOKO', [TSmartCard]); end; end. |
AW: TSmartCard für Delphi 2010
Nenn mich ruhig Trollo - aber ich stehe grad dermassen auf dem Schlauch :oops:
"In neueren Versionen von Delphi kann man Komponenten ja nur noch in Packages hinzufügen" - in VCL-Komponente installieren kann ich doch wählen, ob "in ein vorhandenes Package.. oder "in ein neues Package.." - ich muss das schon unter Komponente, Komponente installieren machen? Ich hatte jetzt nochmal die Kompo so erstellt, wie zuletzt beschrieben. Doch bevor ich dann irgendwas machen kann sagt er ja schon, dass sie installiert wurde. Ich glaube ich liege hier voll daneben. Welche Version setzt du denn ein? Zum Verständnis: wenn ich doch eine eigene unit habe - muss die mit in die Kompo? (Und da musst du diese natürlich mittels RegisterComponents registrieren z.B. mit Hilfe einer extra Unit im Package). Doch wie wird die denn dann aufgerufen bzw. wer schmeisst denn RegisterComponents an? Oder soll ich diese unit in meine Anwendung einbauen und dann "Register" selbst aufrufen? Sorry, ich bastel dir die heftigsten Progs aber das hier peil ich einfach nicht.. Tks nochmal für deine Geduld :roll: |
AW: TSmartCard für Delphi 2010
Hach du verwirrst mich - und dann auch noch bei so was, wo ich selbst gerade so durchblicke :lol:
Die Funktion Register ruft Delphi automatisch beim installieren auf. Du kannst sie auch (inkl. der Vorwärtsdeklaration im interface-Abschnitt) direkt in die SCARDC32.PAS packen. Wenn du dann das Package ... Kompilierst? Erstellst? Aktualisierst? Installierst? ... Naja, irgendwas davon, dann sollte die Komponente installiert sein :-D Aber: Testen kannst du es ja auch so, indem du eine Instanz einfach zur Laufzeit selbst erzeugst ... |
AW: TSmartCard für Delphi 2010
Hi wiedermal,
jetzt ist mir mein Rechner privat abgeraucht, sodass ich das erst die Tage nochmal testen kann - manchmal tut ne Pause ja auch ihr Gutes :wink: Danke nochmal.. Schorsch |
AW: TSmartCard für Delphi 2010
Aaaargs :-( Jetzt habe ich doch tatsächlich die Kompo TOWITOKO drin und freute mich schon, wie ein Schneiderlein. Deine Tipps waren in deiner Source einfach nur auskommentiert ;-)
ABER jetzt kommt: Memory Card support is disabled for SCM Readers. Failed to Load C:\Windows\System32\MCSCM.DLL. Wie hattest du das denn gemacht bzw. welches BS setzt du denn ein - auch Win7? Zwar jetzt echt einen Schritt weiter aber.. ..hättest du noch ne Idee? Tks.. Schorsch |
AW: TSmartCard für Delphi 2010
Du brauchst halt die MCSCM.DLL von SCM :wink:
Wahrscheinlich als Wrapper zwischen der alten SCard.dll von TOWITOKO und dem angeschlossenen Kartenlesen von SCM?! Ka, ich habe dieses ganze Chipkarten-Gedöns hier auf Arbeit noch nie leiden können :stupid: |
AW: TSmartCard für Delphi 2010
Den habe ich ja. Ich habe mittlerweile ALLES von denen, was man nur bekommen kann. Den Wrapper habe ich auch installiert - aber der Fehler kommt nach wie vor. Ich habe mittlerweile so viele .dll-versionen - alle erfolglos probiert.
Jetzt habe ich mal an deren Support gemailt - mal schauen, ob die ne Idee haben. Mensch, was ne Arbeit - und alles für die Füsse :-( Nen kleinen Trumpf hab ich ja noch - mein gutes, altes Delphi 7 - da müsste es noch laufen. Dann muss ich eben diesen Teil der Anwendung darin tippen und mir den Krempel per Socket schicken. Mal sehen.. Sollte dir noch was einfallen ;-) Ciao.. |
AW: TSmartCard für Delphi 2010
Liegt die DLL auch im Anwendungsverzeichnis?
Ich weiß, dass es manchmal kontraproduktiv sein kann, den Wrapper (also nicht die MCSCM.DLL, sondern was anderes) zu installieren. Da läufts dann besser bzw. nur, wenn er nicht drauf ist. |
AW: TSmartCard für Delphi 2010
Hallo ich weiß zwar der der Thread schon ein paar Jahre auf dem Buckel hat aber ich wäre auch gerne an der Komponente interessiert. Zudem wäre es schön zu wissen ob es bei Schorsch666 nun funktioniert.
Vielleicht wäre es auch für andere irgendwann noch einmal interessant so das man die Sourcen hier posten könnte. Ich setze D2010 ein mit W7x64 |
AW: TSmartCard für Delphi 2010
[OT]
Hi! Was macht Ihr mit den "Karten"? - Signieren? - Verschlüsseln? - Krankenkarte lesen? [/OT] Grüsse Mavarik |
AW: TSmartCard für Delphi 2010
Sie sollen zur Identifikation dienen.
Sprich Anmelden und zur Authentifizierung als MasterKey für eine Passwort Datenbank als Beispiel. Habe hier noch ein halbes Dutzend programmierbare Karten hier liegen und ein uraltes Chipdrive, ca 12 Jahre alt. Dies hat lieder irgendwann seinen Dienst eingestellt. Es tauchte beim durchwühlen meiner Sachen auf und da entsptand die kleine Idee. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz