![]() |
asignRKCOM DLL
Hallo zusammen!
ich habe ein Problem bei der Verwendung von Funktionen aus der DLL der im Titel genannten Bibliothek. Es handelt sich um eine C/C++ Dll. Ich habe einige Funktionen bereits in mein Delphi Projekt (Delphi XE 5 Embarcadero RAD Studio) eingebunden, welche auch problemlos aufzurufen sind. Hier ein Beispiel: Funktionsaufruf lt. Schnittstellenbeschreibung:
Code:
long Certificate( void* handle , char* buffer , long * buffersize ) ;
Zitat:
Ich habe das ganze wie folgt umgesetzt:
Code:
type
THandle_PAnsiChar_PAnsiChar__Integer = function( aHandle : THandle; Buffer : PAnsiChar; BufferSize : PAnsiChar ) : Integer; cdecl; [...] var fCertificate : THandle_PAnsiChar_PAnsiChar__Integer; [...] implementation procedure TForm1.FormShow(Sender: TObject); var IntLaenge : PAnsiChar; begin hDll := LoadLibrary('asignRKCom.dll'); if HDll >= 32 then begin fCertificate := GetProcAddress(hDll, 'Certificate'); [...] bufferCertificate := nil; // PAnsiChar IntLaenge := PAnsiChar(AllocMem(1)); // PAnsiChar fCertificate( aHandle, bufferCertificate, IntLaenge ); // dieser Aufruf liefert die benötigte Speichergröße bufferCertificate := PAnsiChar(AllocMem(Integer(IntLaenge^))); case fCertificate( aHandle, bufferCertificate, IntLaenge ) of // dieser Aufruf schreibt den gewünschten Wert in meinen Buffer 0 : begin //OK //showmessage( 'Certificate Serial: OK' ); end; 100 : begin // Buffer ist NULL //showmessage( 'Certificate Serial: Buffer ist NULL' ); end; 101 : begin // Buffer zu klein //showmessage( 'CertificateSerial: Buffer zu klein' ); end; end; [...] end else MessageDlg('Error: could not find asignRKCom.dll', mtError, [mbOk], 0); end; Hier funktioniert alles. Genauso wie in vielen Weitern genau so definierten Funktionen. Die Funktion "fGenerateKey" habe ich identisch behandelt (natürlich auf die neuen Übergabeparameter angepasst). Hier bekomme ich beim Aufruf eine Zugriffsverletzung. Nachdem ich den Längenwert von PAnsiChar in Typ Pointer ( @LongInt ) angepasst hatte bekam ich keine Fehlermeldung mehr, die Methode lieferte jedoch beim 2. Auftruf nicht den gewünschten Wert in "Buffer" zurück. Buffer blieb leer. Der Rückgabewert der Funktion lautete 0 für OK. Ich habe bereits viele Varianten versucht. Übergabewerte vom Typ Pointer, PChar und PLongInt, PAnsiChar und PLongInt, PAnsiString und PLongInt, oder auch AnsiString und Integer/LongInt ... Des Weiteren stieß ich auf folgenden LInk ![]() Leider erfolglos :( Die Funktion ist lt. Schnittstellenbeschreibung wie folgt definiert:
Code:
long GenerateKey ( char* newkey , long *newkeyLen ) ;
Zitat:
Woran könnte es liegen, dass der Aufruf schreitert? Was könnte ich noch versuchen? Danke! :) |
AW: asignRKCOM DLL
Hmm..
Wieso nimmst Du ein PAnsiChar bei long?
Delphi-Quellcode:
Hier bitte die Aufrufkonvention anpassen (register/cdecl/stdcall).
type
TCertificateFunc = function (Handle : THandle; Buffer : PAnsiChar;var BufferSize : DWORD):DWORD;stdCall; var FCertificate : TCertificateFunc; |
AW: asignRKCOM DLL
Ich habe einige Datentypen versucht und bin da hängen geblieben. Ich hatte auch bei der Certificate Funktion nicht von Anfang an gleich einen funktionierenden Aufruf zusammen. ich hab aber wie erwähnt auch schon PLongInt verwendet (bei GenerateKey) und leider dasselbe Ergebnis erhalten. Bei Certificate funktioniert ja alles...
|
AW: asignRKCOM DLL
ABER! Der Hinweis hat das Problem gelöst!!!
VIELEN VIELEN DANK!!!!!!!!!!:-D |
AW: asignRKCOM DLL
ah noch jemand der dort dran ist.
Ich verzweifle hier auch gerade ein wenig. Was ich den ganzen Funktionen nachher mitgeben muss weiß ich auch noch nicht :lol: Österreicher ich hab euch gern ... ganz ehrlich :thumb: |
AW: asignRKCOM DLL
Alles vom Grunde auf selber programmieren ist ja auch Horror. Wir nutzen dafür die Lösung von fiskaltrust. Wäre das für euch eine Option?
|
AW: asignRKCOM DLL
Nuna ja ich muss eh ein Server Programm schreiben und die Clientimplementierung in unsere Kassen inkl Ausdruck des QR Codes auf unsere Belege.
die a.sign DLL nimmt einem schon sehr viel Arbeit ab. Ich muss mich nun nur durchfuchsen was ich benötige. Datenaufbau habe ich mittlerweile auch raus. Interessanter finde ich die diversen Beiträge im Netz das die Startbelege nicht vom Finanzamt in Österreich erkannt werden, obwohl alle Prüftools sie als ok zurückgeben. :lol: |
AW: asignRKCOM DLL
Na ja, der fehlerlose Aufbau des DEP ist ja auch nicht ohne.
Mit der fiskaltrust-Lösung haste einen lokalen Windows-Dienst als Webservice, der mit der Karte redet und das DEP führt. WSDL importieren. Interface mit drei Methoden verwenden. Datencontainer mit den wichtigsten Sachen füllen. Fertig. |
AW: asignRKCOM DLL
Für das DEP werden wir den e-Tresor von A-Trust einsetzen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 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