fbpx
Welcome, Guest
Username: Password: Remember me
Hier wird Deutsch gesprochen

TOPIC: RKSV Lib

RKSV Lib 17 Jan 2020 07:46 #12688

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 139
  • In all meinen Kassenprogrammen verwende ich für die österr. Registrierkassensicherheitsverordnung (RKSV) eine C# Dll zum Erstellen des QR-Codes und zur Signierung mittels Smartcard. Dafür habe ich eine VO Wrapper Lib, welche die OLE Lib benötigt. Beim Import nach X# erhalte ich die Meldung
    Library OLE not found
    Was bedeutet das für meinen Wrapper? Wie bekomme ich ihn zum Laufen?
    LG Franz

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 07:52 #12689

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2280
  • Hallo Franz,
    die VO-Wrapper-Lib kannst Du komplett vergessen - verwende einfach die C#-Lib direkt!
    COM/OLE geht in einer migrierten App nicht.
    OCX-Controls muß man in WinForms-Controls einbinden, aber Dein Code wird hier definitiv einfacher.
    Unter .NET kannst Du Assemblies aller .NET-Sprachen beliebig mischen.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 09:48 #12698

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 139
  • Hallo Wolfgang,
    damit ich nicht alle Aufrufe in meinen Kassenprogrammen ändern muss, wäre es sinnvoll, den Wrapper so umzuschreiben, dass er als Zwischenstück funktioniert!

    Wie binde ich die C# Dll ein, gibt es da ein Beispiel, welche ich mir ansehen kann?

    LG Franz

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 10:11 #12701

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2280
  • Hallo Franz,
    klar kannst Du den Wrapper so umschreiben, dass er dieselbe Schnittstelle hat wie die VO-Version, wäre auch so anzuraten.
    Um eine C#-Library einzubinden, kannst Du sie einfach in den References hinzufügen.
    Dann musst Du noch den Namespace kennen und die Klassen - oder Du schaust Dir das Ganze mit dem ILSpy an. Wenn Du den noch nicht hast: es gibt ein Plugin dafür, daß Dir dann z.B. C# Code als X# anzeigt (so weit möglich):
    www.xsharp.info/itm-downloads?folder=general%252FTools

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 10:53 #12704

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 139
  • Hallo Wolfgang,
    der ILSpy zeigt mir eine ganze Liste an Namespaces: von RKSV.Common.Configuration bis RKSVComComplete.Properties, was davon ist für mich interessant?

    In meinem Wrapper rufe ich nur eine Klasse auf: RKSVCOM{}
    // RKSVCom initialisieren
    _oRKSVCom := RKSVCOM{}
    IF !_oRKSVCom:fInit
    	_cMsgLast := _RKSV_INIT
    	_cMsgFirst:= IIF(Empty(_cMsgFirst), _cMsgLast, _cMsgFirst)
    	_oRKSVCom := NULL_OBJECT
    	RETURN SELF
    ENDIF	
    Die Methoden dieser Klasse sind mit Parameter und Return Value bekannt, verwende ich ja im Wrapper, z.B:
    METHOD GetReaderAt(nPos AS WORD;	// Position des Readers
    		) AS STRING PASCAL CLASS RKSV
    // Ermittelt den Readernamen für Reader Nummer (0-n) und speichert diesen in _cReader
    // -> Return: Readername oder NULL_STRING
    	
    LOCAL uRet AS USUAL
    
    uRet := _oRKSVCom:GetReaderAt(nPos)
    IF ValType(uRet) <> "C" .OR. Empty(uRet)
    	_cMsgLast := StrTran(_RKSV_GetReaderAt, "%POS%", AsString(nPos))
    	_cMsgFirst:= IIF(Empty(_cMsgFirst), _cMsgLast, _cMsgFirst)
    	RETURN NULL_STRING
    ENDIF
    	
    _cReader := uRet
    RETURN uRet
    Läßt sich damit was anfangen?
    Franz
    Attachments:

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 11:08 #12707

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2280
  • Hallo Franz,
    dann würde ich mal in der Assembly nach einer solchen Klasse suchen.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 11:44 #12709

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 139
  • Hallo Wolfgang,
    Fehler von mir, die C# Klasse heißt RKSVComComplete, RKSVCom war noch von mir!
    METHOD Init(ObjID, fROTCHECK) CLASS RKSVCOM
    	SELF:cIID := "{987E40A2-2708-3453-B906-A8849E9BDA00}"
    	SELF:cProgId := "RKSVComComplete"
    	SELF:cClsId :=  "{9A79D6C4-A084-4D27-9D0D-AAE7703571B0}"
    
    	IF (ObjID=NIL)
    		ObjId := "RKSVComComplete"
    	ENDIF
    	SUPER:Init(ObjID, 0, .T., fRotCheck)
    	SELF:_dwFuncs	:= 39
    	SELF:_dwVars 	:= 0
    	RETURN SELF
    Wenn ich jetzt daraus eine Methode verwenden möchte, z.B. GetReaderAt, wie kann ich die Klasse direkt verwenden und die Methode daraus aufrufen?

    Please Log in or Create an account to join the conversation.

    Last edit: by lagraf.

    RKSV Lib 17 Jan 2020 12:07 #12710

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2280
  • Hallo Franz,

    wenn Du den betreffenden Namespace in einem Using-Statement angibst, kannst Du die Klasse wie eine normale X#/VO Klasse instanzieren und verwenden - das ist kein Unterschied, denn das ist effektiv genau so eine .NET Klasse wie alle anderen Methoden in Deiner migrierten Applikation.
    Gegenüber VO und COM wird das Ganze schneller und sicherer (keine Konvertierung der Parameter mehr über COM und genaue Typ-Prüfung).
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 15:10 #12712

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 139
  • Hallo Wolfgang,
    gibt es eine Möglichkeit in X#, sich die Aufrufe wie unter VO (Tools / Automation Server) generieren zu lassen, oder ist alles Handarbeit?

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 15:16 #12713

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2280
  • Hallo Franz,

    das brauchst Du nicht - Du kannst die Methoden direkt aufrufen, und der Compiler prüft sogar die Parameter, bzw XIDE/Visual Studio helfen da sogar mit Intellisense.
    Den Zwischenschritt gibt/braucht es nicht mehr.

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 15:30 #12714

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 139
  • Ich wollte gerade eine neue Lib beginnen, kann sie aber nicht anlegen. Ich bekomme immer die Meldung dass der Application Folder invalid ist (siehe jpg).
    -> Hab's auch schon mit einfacheren Namen probiert.
    -> Weder mit noch ohne angelegtem Ordner klappts
    Attachments:

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 15:39 #12716

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2280
  • Hallo Franz,
    mit der XIDE können einzelne Applikationen nicht in Unterordnern abgelegt werden. Du kannst nur Application Groups erstellen:

    Auf Datei-System-Ebene sind die aber auf derselben Ebene:

    Nimm einfach das "Lib2X" raus - und beim Assemblynamen würde ich auf Leer- und Sonderzeichen sowie führende Underscores verzichten.
    Anders als bei VO werden aus Libraries eigenständige DLLs erzeut - mit dem Namen, den Du hier angibst.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it
    Attachments:

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 16:15 #12717

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 139
  • Hallo Wolfgang,
    verstehe ich nicht, ich kanns auch so nicht anlegen!
    -> Projekt: Brandnamic heißt bei mir VO2X#
    -> darunter eine Application Group: Combit heißt bei mir LibX#
    -> darunter eine New Application: _RKSV1.76 X#
    Wie lautet dann der App-Pfad?
    Ich kann die App weder unter ..\Project\Applications direkt noch in einem darunter liegenden Ordner anlegen. Mit einem einfacheren Namen (z.B. Lib1) gehts in ..\Project\Applications, aber in einem Unterordner nicht.

    Please Log in or Create an account to join the conversation.

    Last edit: by lagraf.

    RKSV Lib 17 Jan 2020 16:23 #12718

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2280
  • Hallo Franz,
    lass den Application Folder einfach von XIDE erstellen.
    Auf jeden Fall wäre der korrekte Name dann:
    %ProjectPath%\Applications\RKSV1.76 X#
    Die Application Group spiegelt sich hier nicht wieder, die ist rein für die Gliederung in der XIDE verantwortlich.
    Und verwende bitte den vorgegebenen Platzhalter, sonst gibt es später Probleme, wenn die Applikation in ein anderes Projekt importiert werden soll oder sich Deine Pfade ändern.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 16:32 #12719

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 139
  • Es liegt am #
    Das Zeichen mag er nicht, ohne gehts!
    LG Franz

    Please Log in or Create an account to join the conversation.

    RKSV Lib 17 Jan 2020 16:37 #12720

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2280
  • Hallo Franz,

    auf jeden Fall würde ich den Pfad für den Application Path auf dem Vorgabewert belassen - alles andere fällt Dir früher oder später auf den Kopf, spätestens beim Übertragen in eine andere Installation oder in ein anderes Projekt. Nimm nur mal an, Du möchtest eine neue Version der Lib machen. Also wirst Du sie in ein anderes Projekt importieren, und dann überschreiben die hartkodierten Pfadnamen die bestehenden Datei (die XIDE warnt zwar, und versucht die Projektpfade anzupassen, aber das funktioniert nicht wirklich).
    Du kannst es mir glauben - so was ist mir auch schon passiert.
    Es gibt einen Grund, warum der Chris das alles so vorgesehen hat.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    RKSV Lib 20 Jan 2020 08:45 #12771

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 139
  • Hallo Wolfgang,
    ich habe die C# RKSVComComplete.dll jetzt wie folgt in meine X#-Lib eingebaut:
    -> Zuerst habe ich die Dll unter Properties / References / Browse hinzugefügt
    -> Die com ILSpy angezeigten Namespaces betreffend RKSVComComplete habe ich hinzugefügt, es gibt aber auch noch welche nur mit RKSV (z.B. RKSV.Light), die mag der Compiler anscheinend nicht
    USING RKSVComComplete
    USING RKSVComComplete.dsRKSVLightDevTableAdapters
    USING RKSVComComplete.Properties
    -> Dann mein Code für die Aufrufe (2 Beispielmethoden)
    CLASS MyLib
    	PROTECT _oRKSVCom as RKSVComComplete
    ...
    CONSTRUCTOR()
    	_oRKSVCom := RKSVComComplete{}
    ..
    METHOD GetCardReaders()    // Aufruf ohne Parameter
    	LOCAL uRetValue	AS USUAL
    	uRetValue := _oRKSVCom:GetCardReaders()
    	RETURN (uRetValue)
    ...
    METHOD GetQrCodeString(;   // Aufruf mit Parameter und RefParameter
    		jwsInput,;			// AS STRING
    		qrOutput;			// REF STRING
    		) 
    	LOCAL uRetValue	AS USUAL
    	uRetValue := _oRKSVCom:GetQrCodeString(jwsInput, @qrOutput)
    	RETURN (uRetValue)
    ...
    END CLASS
    Beim compilieren erhalte ich den Fehler
    error XS0246: The type or namespace name 'RKSVComComplete' could not be found (are you missing a using directive or an assembly reference?)
    Was fehlt noch bzw. ist falsch?
    LG Franz

    Please Log in or Create an account to join the conversation.

    RKSV Lib 20 Jan 2020 09:10 #12773

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2280
  • Hallo Franz,
    ohne die Lib zu sehen, kann ich da leider nichts dazu sagen.
    Dazu müsste ich hellsehen können, und dazu reicht es bei mir nicht.
    Sorry
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    RKSV Lib 20 Jan 2020 09:29 #12774

  • lagraf's Avatar

  • lagraf

  • Topic Author


  • Posts: 139
  • Hallo Wolfgang,
    ich dachte, dass dir vielleicht ein Schritt auffällt, den ich ausgelassen habe! Anbei die Dll, oder soll ich die komplette Testinstallation zum Download irgendwo hinstellen?
    Attachments:

    Please Log in or Create an account to join the conversation.

    RKSV Lib 20 Jan 2020 09:39 #12775

  • wriedmann's Avatar

  • wriedmann


  • Posts: 2280
  • Hallo Franz,
    soweit ich das sehe, heißt die Klasse
    dsRKSVLightDev
    Kommt mir aber komisch vor, dass die von System.Data.DataSet vererbt.
    Zumindestens ist das die einzige IMHO verwertbare Klasse im Namespace RKSVComComplete.
    Wesentlich zielführender scheint mir das die Klasse RKSVLight im Namespace RKSV.Light zu sein:

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it
    Attachments:

    Please Log in or Create an account to join the conversation.

    Moderators: wriedmann