xsharp.eu • RKSV Lib - Page 3
Page 3 of 7

RKSV Lib

Posted: Mon Jan 20, 2020 10:11 am
by lagraf
Hallo Wolfgang,
ich habe jetzt folgendes geändert, damit erkennt er inzwischen Methoden wie von dir gelistet (z.B. GetCardInReader)

Code: Select all

USING RKSV.Light
CLASS RKSVCOM
	PROTECT _oRKSVCom AS RKSVLight
Allerdings bekomme ich jede Menge Fehler bei Methoden, die er nicht findet in RKSVLight (z.B. GetReadersCount)

Code: Select all

error XS1061: 'RKSV.Light.RKSVLight' does not contain a definition for 'GetReadersCount' and no accessible extension method 'GetReadersCount' accepting a first argument of type 'RKSV.Light.RKSVLight' could be found (are you missing a using directive or an assembly reference?)
Es gibt allerdings noch eine weitere Dll: ITGRKSVCom.Dll, dort sind teils die gleichen und teils fehlende Methoden enthalten. Dort gibt es ein Interface IRKSVCom und eine Klasse RKSVCom. Wie hängen die beiden zusammen?

Was ist nun der richtige Namespace und die richtige Klasse, die ich verwenden muss?

RKSV Lib

Posted: Mon Jan 20, 2020 10:34 am
by wriedmann
Hallo Franz,
dann kannst Du den Namespace RKSVComComplete verwenden und die Klasse RKSVCom.
Das Interface wird nur für COM gebraucht.
Diese Klasse ist eigentlich dafür da, per COM angesprochen zu werden, kann aber auch direkt verwendet werden.
Wolfgang

RKSV Lib

Posted: Mon Jan 20, 2020 11:00 am
by lagraf
Hallo Wolfgang,
damit schauts schon recht gut aus bis auf 2 Kleinigkeiten:

Nach dem Aufruf der RKSVCom wird mittels fInit abgefragt, ob es funktioniert hat, allerdings meckert der Compiler, dass RKSVCom keine Definition von fInit hat! Gab es die nur in VO über OLE, soll ich stattdessen abfragen, ob RKSVCom NULL_OBJECT ist?

Code: Select all

	_oRKSVCom := RKSVCOM{}
	IF !_oRKSVCom:fInit
		// Fehlermeldung
		RETURN SELF
	ENDIF	
Ich rufe aus meinen Programmen meine Klasse RKSV{} auf, darin werden dann die Methoden an die RKSVCom Dll weitergeleitet. Der Compiler meckert aber, dass der Type oder Namespace RKSV nicht gefunden wird, obwohl es die Klasse gibt. Wenn ich den Namen ändere, z.B. auf RKSVLib, passt es, allerdings müßte ich dann alle Aufrufe in meinen Programmen ändern. Wie kann ich herausfinden, warum der RKSV nicht akzeptiert?

LG Franz

RKSV Lib

Posted: Mon Jan 20, 2020 12:38 pm
by wriedmann
Hallo Franz,

fInit ist ein Zugriff aus dem COM-Klassen. Da Du nicht mit COM arbeitest. solltest Du wirklich auf null abfragen, oder besser noch, den Aufruf in eine try - end try Klausel einpacken.

Was RKSV betrifft: klar kompiliert das nicht - schließlich gibt es eine keine Klasse dieses Namens.

Die Lösung sollte eigentich auf der Hand liegen:

Code: Select all

class RKSV inherit RKSVCom
Constructor()
return
end class
Damit erzeugst Du die Klasse und kannst sie direkt verwenden.
Wolfgang

RKSV Lib

Posted: Mon Jan 20, 2020 3:33 pm
by lagraf
Hallo Wolfgang,
fInit ist klar, sowas in der Art habe ich mir schon gedacht.

Aber die Klasse RKSV gibt es schon, die Abhängigkeiten sind wie folgt:

Code: Select all

CLASS RKSV   // Enthält die Aufrufe aus meinen Kassenprogrammen
     PROTECT _oRKSVWrapper as RKSVWrapper
CONSTRUCTOR
     _oRKSVWrapper := RKSVWrapper{}   // Wrapper der RKSVComComplete Dll
...
END CLASS

USING RKSVComComplete
CLASS RKSVWrapper   // Spiegelt praktisch die Methoden aus RKSVComComplete
     PROTECT _oRKSVCom as RKSVCom
CONSTRUCTOR
     _oRKSVCom := RKSVCom{}   // RKSVComComplete Dll
...
END CLASS
Wenn ich nun die Klasse RKSV umbenenne, sind die Fehler weg. Ich weiß nicht, warum den Compiler RKSV als Klasse stört.

RKSV Lib

Posted: Mon Jan 20, 2020 3:46 pm
by lagraf
Ausserdem habe ich noch einige Fehlermeldungen, die ich mir nicht erklären kann und zwar im Zusammenhang mit Ref Parametern:

Code: Select all

METHOD ConvertJWSCompactToText(cJws AS STRING) AS STRING PASCAL 
	LOCAL cResult AS STRING
	LOCAL cAnswer AS STRING
	LOCAL uRet AS USUAL
	uRet := _oRKSVCom:ConvertJWSCompactToText(cJws, @cResult, @cAnswer)
Der Code bringt den Fehler

Code: Select all

error XS1503: Argument 2: cannot convert from 'System.IntPtr*' to 'string'
Was ist der System.IntPtr?

RKSV Lib

Posted: Mon Jan 20, 2020 3:48 pm
by wriedmann
Hallo Franz,
bitte poste mal die Prototypen des VO-COM-Moduls.
Wolfgang

RKSV Lib

Posted: Mon Jan 20, 2020 3:59 pm
by lagraf
Hallo Wolfgang,
meinst du den Code, den VO über Tools / Automation Server generiert?

RKSV Lib

Posted: Mon Jan 20, 2020 4:01 pm
by wriedmann
Hallo Franz,

genau den, aber nur die Methoden-Deklarationen. Der Funktionsbody ist gleichgültig weil austauschbar.

Wolfgang

RKSV Lib

Posted: Mon Jan 20, 2020 4:09 pm
by lagraf

Code: Select all

CLASS _RKSVCOM INHERIT OLEAutoObjectEx

METHOD ConvertJWSCompactToText(;
		jwsCompact,;		// AS STRING
		text,;		// REF STRING
		errorMessage;		// REF STRING
		) CLASS _RKSVCOM

METHOD DecodeBase64URL(;
		data;		// AS STRING
		) CLASS _RKSVCOM

METHOD DecryptAES256_CTR(;
		encrypted,;		// AS ARRAY OF  BYTE
		decrypted,;		// AS ARRAY OF  BYTE
		key,;		// AS ARRAY OF  BYTE
		kassenID,;		// AS STRING
		renummer;		// AS STRING
		) CLASS _RKSVCOM

METHOD Equals(;
		obj;		// AS USUAL
		) CLASS _RKSVCOM

METHOD ExportJWS(;
		certificate,;		// AS STRING
		certificateChain,;		// AS STRING
		jwsCompactReceipts,;		// AS ARRAY OF  STRING
		exportResult;		// REF STRING
		) CLASS _RKSVCOM

METHOD ExportJWSDelimitedString(;
		certificate,;		// AS STRING
		certificateChain,;		// AS STRING
		delimitedReceipts,;		// AS STRING
		exportResult;		// REF STRING
		) CLASS _RKSVCOM

METHOD ExportJWSDelimitedStringToFile(;
		certificate,;		// AS STRING
		certificateChain,;		// AS STRING
		delimitedReceipts,;		// AS STRING
		path;		// AS STRING
		) CLASS _RKSVCOM

METHOD ExportJWSToFile(;
		certificate,;		// AS STRING
		certificateChain,;		// AS STRING
		jwsCompactReceipts,;		// AS ARRAY OF  STRING
		path;		// AS STRING
		) CLASS _RKSVCOM

METHOD GenerateAes256Key(;
		initialvalue,;		// AS STRING
		result,;		// REF STRING
		errorMessage;		// REF STRING
		) CLASS _RKSVCOM

METHOD GetCardCertificate(;
		readername,;		// AS STRING
		certificateBase64,;		// REF STRING
		certificateChainBase64;		// REF STRING
		) CLASS _RKSVCOM

METHOD GetCardInReader(;
		reader;		// AS STRING
		) CLASS _RKSVCOM

METHOD GetCardReaders(		) CLASS _RKSVCOM

METHOD GetChainApdu(;
		readername;		// AS STRING
		) CLASS _RKSVCOM

METHOD GetHashCode(		) CLASS _RKSVCOM

METHOD GetLibraryVersion(		) CLASS _RKSVCOM

METHOD GetMachineCode(;
		machinecode;		// REF STRING
		) CLASS _RKSVCOM

METHOD GetQrCodeString(;
		jwsInput,;		// AS STRING
		qrOutput;		// REF STRING
		) CLASS _RKSVCOM

METHOD GetReaderAt(;
		position;		// AS LONG
		) CLASS _RKSVCOM

METHOD GetReadersCount(		) CLASS _RKSVCOM

METHOD GetType(		) CLASS _RKSVCOM

METHOD GetVersion(;
		readername;		// AS STRING
		) CLASS _RKSVCOM

METHOD Init(ObjID, fROTCHECK) CLASS _RKSVCOM

METHOD IsCardNumberPresent(;
		cardnumber;		// AS STRING
		) CLASS _RKSVCOM

METHOD IsCardReaderPresent(;
		readername;		// AS STRING
		) CLASS _RKSVCOM

METHOD IsLicenseValid(		) CLASS _RKSVCOM

METHOD RKSVJwsToImage(;
		jws,;		// AS STRING
		qrCode,;		// REF STRING
		ocraCode;		// REF STRING
		) CLASS _RKSVCOM

METHOD SaveImageToFile(;
		base64image,;		// AS STRING
		path,;		// AS STRING
		mimetype;		// AS STRING
		) CLASS _RKSVCOM

METHOD SignReceipt(;
		sKassenID,;		// AS STRING
		sReaderName,;		// AS STRING
		sCardPIN,;		// AS STRING
		sReNummer,;		// AS STRING
		sReBelegDatumUhrzeit,;		// AS STRING
		sReBetragSatzNormal,;		// AS STRING
		sReBetragSatzErmaessigt1,;		// AS STRING
		sReBetragSatzErmaessigt2,;		// AS STRING
		sReBetragSatzBesonders,;		// AS STRING
		sReBetragSatzNull,;		// AS STRING
		sReStandUmsatzzaehler,;		// AS STRING
		sReSigVorigerBeleg,;		// AS STRING
		sAesKey,;		// AS STRING
		sJWSCompactresult,;		// REF STRING
		sQRImageBase64,;		// REF STRING
		sOCRAImageBase64,;		// REF STRING
		sAntwort;		// REF STRING
		) CLASS _RKSVCOM

METHOD SignStornoReceipt(;
		sKassenID,;		// AS STRING
		sReaderName,;		// AS STRING
		sCardPIN,;		// AS STRING
		sReNummer,;		// AS STRING
		sReBelegDatumUhrzeit,;		// AS STRING
		sReBetragSatzNormal,;		// AS STRING
		sReBetragSatzErmaessigt1,;		// AS STRING
		sReBetragSatzErmaessigt2,;		// AS STRING
		sReBetragSatzBesonders,;		// AS STRING
		sReBetragSatzNull,;		// AS STRING
		sReSigVorigerBeleg,;		// AS STRING
		sJWSCompactresult,;		// REF STRING
		sQRImageBase64,;		// REF STRING
		sOCRAImageBase64,;		// REF STRING
		sAntwort;		// REF STRING
		) CLASS _RKSVCOM

METHOD SignTrainReceipt(;
		sKassenID,;		// AS STRING
		sCardSerial,;		// AS STRING
		sReaderName,;		// AS STRING
		sReNummer,;		// AS STRING
		sReBelegDatumUhrzeit,;		// AS STRING
		sReBetragSatzNormal,;		// AS STRING
		sReBetragSatzErmaessigt1,;		// AS STRING
		sReBetragSatzErmaessigt2,;		// AS STRING
		sReBetragSatzBesonders,;		// AS STRING
		sReBetragSatzNull,;		// AS STRING
		sReSigVorigerBeleg,;		// AS STRING
		sJWSCompactresult,;		// REF STRING
		sQRImageBase64,;		// REF STRING
		sOCRAImageBase64,;		// REF STRING
		sAntwort;		// REF STRING
		) CLASS _RKSVCOM

ACCESS ToString(		) CLASS _RKSVCOM

METHOD VerifyJWS(;
		jwsCompact,;		// AS STRING
		certificateBase64;		// AS STRING
		) CLASS _RKSVCOM

METHOD VerifyPin(;
		readername,;		// AS STRING
		pin;		// AS STRING
		) CLASS _RKSVCOM