RKSV Lib

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

RKSV Lib

Post by lagraf »

Hallo Wolfgang,
anbei die Lib, dazu noch eine Frage:

Du hast ja mal gesagt, dass die Dlls im Programmordner liegen müssen. Die Installationsroutine von ITG installiert alles unter c:program filesITG ConsultingRKSVComComplete. Werden die Dlls dort gefunden, wenn das eigentliche X# Programm irgendwo anders installiert ist?
Attachments
_RKSV 1.76.zip
(26.04 KiB) Downloaded 62 times
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

RKSV Lib

Post by wriedmann »

Hallo Franz,
irgendwie scheint es da ein Problem mit dem Namen RKSV zu geben.
In den C#-DLLs wird der verwendet, und das scheint ein Problem mit der impliziten Namespaces zu geben.
Wenn ich den Namen der Klasse ändere, kompiliert es tadellos, ebenso wenn ich die Klasse RKSV in einen eigenen Namespace verpacke.
Ich habe aber trotzdem eine Lösung gefunden:
Wenn Du hier explizit einen Namespace angibst, kompiliert das Ding:
RKSV_prop.png
RKSV_prop.png (37.3 KiB) Viewed 477 times
Was die DLLs und das Verzeichnis angeht: auf Deinem Rechner ist das kein Problem, weil die XIDE die Assemblies ins Bin-Verzeichnis kopiert - kannst Du gerne nachprüfen.
Auf dem Kunden-Rechner musst Du das machen, außer der Hersteller wirft die Assemblies in den GAC - den Global Assembly Cache (und Du installierst das auf den Kunden-Rechnern). Das erkennst Du entweder mit dem Programm GACView oder Du findest die DLLs unter den References im GAC-Tab.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

RKSV Lib

Post by lagraf »

Dann bin ich froh, dass es nicht mein Fehler ist :)
Danke für deine Hilfe und Geduld, die Libs sind erstmal durch. Bei Gelegenheit fange ich dann mit dem ersten Kassenprogramm an, ist Code von mir, sollte daher kein Problem sein, aber vorher muss ich mich noch unters Messer legen! :S
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

RKSV Lib

Post by wriedmann »

Alles Gute für Deine Operation, Franz!
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

RKSV Lib

Post by lagraf »

Hallo Wolfgang,
danke für deine Wünsche! Inzwischen bin ich zurück, wie du bereits bemerkt hast :) , um 2 Schnitte im Knie reicher (Meniskuseinriss und Knorpelablösung)!
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

RKSV Lib

Post by lagraf »

Ich bin grad beim Test des ersten Programms mit der RKSV Lib, bekomme aber bereits beim ersten Aufruf kein korrektes Ergebnis aus den Dlls von ITG Consulting zurück.

-> Bei meiner Lib _RKSV 1.76 habe ich RKSVComComplete.dll und ITGRKSVCom.dll eingebunden
-> Meine Lib _RKSV 1.76 habe ich beim Hauptprogramm eingebunden
-> Dann rufe ich auf

Code: Select all

USING RKSVComComplete
CLASS RKSVINT
	PROTECT _oRKSVCom AS RKSVCom	// Klasse aus RKSVComComplete von ITG
...
CONSTRUCTOR()
	_oRKSVCom := RKSVCom{}
	RETURN
...
METHOD GetReadersCount(		) AS INT PASCAL 
	LOCAL nRetValue	AS INT
	nRetValue := _oRKSVCom:GetReadersCount()
	? _oRKSVCom	// {(0x0000)0x012AB327} CLASS RKSVCOM
	? _oRKSVCom:GetReadersCount()	-1
	RETURN (nRetValue)
Fehlt noch irgend etwas?
Wie kann ich herausfinden, woran es scheitert?
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

RKSV Lib

Post by wriedmann »

Hallo Franz,
kann es sein, dass nicht alle benötigten DLLs im Verzeichnis der Applikation liegen?
Hast Du das im Debugger mal angeschaut?
Ist schon mal eine positive Tatsache, dass Du keinen Laufzeitfehler zurückbekommst.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

RKSV Lib

Post by lagraf »

Hallo Wolfgang,
es scheint so zu sein!

Es gibt noch ein paar Dlls, die aus RKSVComComplete.dll und ITGRKSVCom.dll aufgerufen werden. Ich habe jetzt mal alle in den Ordner c:xide...debug kopiert und erhalte nun bei GetReadersCount() eine 1 zurück!

Gibt es eine Möglichkeit, dass man die Dlls im Programmordner von ITG Consulting unter c:Program Files... lassen kann?
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

RKSV Lib

Post by wriedmann »

Hallo Franz,
wenn es .NET-DLLs sind, leider nicht - außer Du installierst sie im GAC. Dafür müssen sie aber signiert sein, und das muss der Hersteller machen.
Da musst Du aber probieren, welche Du im Programm-Verzeichnis haben musst.
Diese Wahl (entweder GAC mit Versionsangabe oder Programm-Verzeichnis) soll dazu führen, die "DLL-Hölle" zu entschärfen, und in den meisten Fällen funktioniert das auch.
Das ist aber eine Entscheidung von Microsoft und nicht vom X#-Team.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

RKSV Lib

Post by lagraf »

Hallo Wolfgang,
das erste Kassenprogramm ist fast fertig bis auf ein gravierendes Problem in meiner RKSV Lib:
Wenn ich mit VO einen Base64 codierten String wieder decodiere, funktioniert dies.
Wenn ich es beim gleichen String mit X# mache, erhalte ich folgende Fehlermeldung:

Code: Select all

The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding 
characters, or an illegal character among the padding characters.
Der Aufruf in meiner Lib funktioniert in 2 Stufen (gekürzt):

Code: Select all

CLASS RKSV     // Meine Methoden
PROTECT _oRKSVINT as RKSVINT
METHOD ConvertJWSCompactToText(cJws AS STRING) AS STRING PASCAL 
	// Wandelt einen JWS-String in normalen Text um
	// -> Return: Umgewandelter JWS-String oder NULL_STRING
	LOCAL cResult AS STRING			// Umgewandelter JWS-String
	LOCAL cAnswer AS STRING			// Fehlertext
	LOCAL lRet AS LOGIC
	lRet := _oRKSVINT:ConvertJWSCompactToText(cJws, @cResult, @cAnswer)
	RETURN cResult

CLASS RKSVINT     // Interface zu ITG RKSVCom
PROTECT _oRKSVCom as RKSVCom
METHOD ConvertJWSCompactToText(;
		jwsCompact AS STRING,;
		text REF STRING,;
		errorMessage REF STRING;
		)  AS LOGIC PASCAL
	LOCAL lRetValue	AS LOGIC
	? jwsCompact
	lRetValue := _oRKSVCom:ConvertJWSCompactToText(jwsCompact, @text, @errorMessage)
	? text, errorMessage	// empty text, obige Fehlermeldung
	RETURN (lRetValue)
Der Übergabestring jwsCompact in VO und X# sollte identisch sein:

Code: Select all

X#
eyJhbGciOiJFUzI1NiJ9.X1IxLUFUMl8wMV8yMDAwMDAwMV8yMDIwLTAyLTE1VDA5OjI4OjM0XzAsM
DBfMCwwMF8wLDAwXzAsMDBfMCwwMF9ja3ZuWUVDRjM2QT1fMDFFRDNBODFBMTRBNEM3MjcwMjNDMkIwN
TZfazQyNHlmZ3NqTFU9.YwubNZa1MEbU45lXW_HGW4sxF3lYu9hIz4e4T6jhlWdE5ZK45tMx8zTIZnJ6
YDApQ1RllhByZm3QwymdYKAITQ

Vo
eyJhbGciOiJFUzI1NiJ9.X1IxLUFUMl8wMV8yMDAwMDAwMV8yMDIwLTAyLTE1VDA5OjI4OjM0XzAsM
DBfMCwwMF8wLDAwXzAsMDBfMCwwMF9ja3ZuWUVDRjM2QT1fMDFFRDNBODFBMTRBNEM3MjcwMjNDMkIwN
TZfazQyNHlmZ3NqTFU9.YwubNZa1MEbU45lXW_HGW4sxF3lYu9hIz4e4T6jhlWdE5ZK45tMx8zTIZnJ6
YDApQ1RllhByZm3QwymdYKAITQ
Hast du eine Idee woran es liegen könnte?
Post Reply