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

TOPIC:

Gma.QrCodeNet.Encoding.dll 20 Sep 2021 15:31 #19651

  • lagraf
  • lagraf's Avatar
  • Topic Author


  • Posts: 307
  • Ich würde gerne mal probieren, einen QR Code mit X# und der Gma.QrCodeNet.Encoding.dll zu erstellen und zu speichern.
    Dazu gibt es im Internet C# Beispiele, z.B.:
        using System;
        using System.Collections.Generic;
        using System.Diagnostics;
        using System.Drawing;
        using System.Drawing.Imaging;
        using System.IO;
        using System.Linq;
        using System.Text;
        using System.Windows.Forms;
        using Gma.QrCodeNet.Encoding;
        using Gma.QrCodeNet.Encoding.Windows.Controls;
    ...
         QrEncoder encoder = new QrEncoder(ErrorCorrectionLevel.H);
         QrCode code = encoder.Encode(encodeString);
         Renderer renderer = new Renderer(25, System.Drawing.Brushes.Black, System.Drawing.Brushes.White);
         renderer.CreateImageFile(code.Matrix, IMAGE_NAME, ImageFormat.Png);

    Kann man den Code auch mit X# abbilden, was ist eigentlich der Renderer?

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

    Gma.QrCodeNet.Encoding.dll 20 Sep 2021 15:35 #19652

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3152
  • Hallo Franz,
    ich sehe keinen Grund, warum man das mit X# nicht können sollte.
    Die entsprechende Zeile würde in X# so ausschauen:
    oRenderer := Renderer{ 25, System.Drawing.Brushes.Black, System.Drawing.Brushes.White } as Renderer
    Woher die Klasse Renderer stammt, kann ich Dir so nicht sagen, ohne die DLL wirklich zu holen und zu versuchen, das umzusetzen.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

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

    Gma.QrCodeNet.Encoding.dll 20 Sep 2021 17:24 #19653

    • ic2
    • ic2's Avatar


  • Posts: 1524
  • Hallo Franz,

    Ich denke, der Originalcode ist von archive.codeplex.com/?p=qrcodenet und ist auf github.com/lianggx/QrCode.Net

    Über das Rendern: Rendern einer QR-Code-Bitmatrix auf den Bildschirm, in eine Bilddatei oder einen Stream.

    Wenn Sie das Github-Beispiel haben kann mit ILSpy eine ziemlich genaue Übersetzung in X# gemacht werden.

    So funktioniert es:

    www.xsharp.eu/forum/welcome/2610-scanner-wia#19217

    ============================================================
    English
    I think the original code comes from archive.codeplex.com/?p=qrcodenet and it's forked on github.com/lianggx/QrCode.Net.

    About rendering this site says: Rendering of QR code bit matrix to screen, into an image file or stream.

    If you have the Github sample and let ILSpy point to the exe you will get a pretty accurate translation to X#. Here is how it works:

    www.xsharp.eu/forum/welcome/2610-scanner-wia#19217


    Dick

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

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 11:22 #21609

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 307
  • Endlich komme ich mal wieder dazu, beim QRCode weiterzumachen!

    Ich möchte die Gma.QrCodeNet.Encoding.dll dazu verwenden, einen QR-Code zu generieren und als File zu speichern. Dazu habe ich eine Methode in X# erstellt:
    LOCAL oRenderer as Renderer
    LOCAL oEncode as QREncode
    LOCAL code as QrCode
    
    USING System
    USING System.Collections.Generic
    USING System.Diagnostics
    USING System.Drawing
    USING System.Drawing.Imaging
    USING System.IO
    USING System.Linq
    USING System.Text
    USING System.Windows.Forms
    USING Gma.QrCodeNet.Encoding
    USING Gma.QrCodeNet.Encoding.Windows.Controls
    
    oEncoder := QrEncoder{ErrorCorrectionLevel.H}
    code := oEncoder.Encode("Dies sollte ein QR-CODE sein")
    oRenderer := Renderer{ 25, System.Drawing.Brushes.Black, System.Drawing.Brushes.White }
    oRenderer.CreateImageFile(code.Matrix, "TESTQR.PNG", ImageFormat.Png)

    Dabei bekomme ich aber die Fehler:
    error XS9002 Parser: unexpected input "Gma"
    error XS9002 Parser: unexpected input "System"

    Die DLL liegt im App Ordner, wie mache ich sie dem Prog bekannt?
    Die System Angaben sind wahrscheinlich aus .NET, wie findet X# diese?

    Frage an Robert: Wie wäre es mit einem C# Translator, damit hätte man eine riesige Bibliothek an Bausteinen zur Verfügung?

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

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 11:41 #21610

    • Chris
    • Chris's Avatar


  • Posts: 3539
  • Hi Franz,

    You need to put the USING statements in the beginning of the file.

    About a c# translator, you can use ILSpy, with Fabrice's plugin which generates X# output: www.xsharp.eu/itm-downloads?folder=general%252FTools

    .
    XSharp Development Team
    chris(at)xsharp.eu

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

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 11:43 #21611

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3152
  • Hallo Franz,
    wenn Du die XIDE verwendest: unter den References einbinden. Dann wird die DLL alleine ins Bin-Verzeichnis kopiert.
    Ohne diese Angabe wird die DLL nicht verwendet - wie denn auch.

    Und wegen C#-Translator: so was gibt es schon.
    Wenn Du dem C#-Code kompiliert vorliegen hast, kannst Du Dir den Quellcode mit ILSpy anschauen, und das Plugin vom Fabrice zeigt ihn Dir in X#-Syntax an.

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

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

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 14:10 #21612

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 307
  • Ich habe die Gma.QrCodeNet.Encoding.dll unter References eingetragen und die USING Statements vor die Start Function gelegt. Beim Compilieren erhalte ich dann die Meldung

    error XS0234: The type or namespace name 'Controls' does not exist in the namespace 'Gma.QrCodeNet.Encoding.Windows' (are you missing an assembly reference?)

    Ist der Eintrag nicht Bestandteil des Gma.QrCodeNet.Encoding, ich habe ja nur die Gma.QrCodeNet.Encoding.dll? Weglassen kann ich die USING davon nicht, da sonst Renderer, QREncode, QRCode nicht erkannt werden.

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

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 14:22 #21613

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 307
  • Hi Chris
    I've already installed ILSpy 2.3.1.1855, do I need a newer version? What do I need from the ILSpy Dlls on your page? How do I integrate that Dll into ILSpy? What's the diff between
    - ILSpy502.XSharpLanguage.Plugin.dll.zip
    - ILSpy 5.02 plugin
    - ILSpy 5 plugin
    I've a C# Dll which uses Gma.Qr.CodeNet.Encoding.dll to generate and save QRCodes, but it does many other things I do not need, so I only would like to extract the QRCode calls.

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

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 14:38 #21614

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3152
  • Hallo Karl,
    leider kenne ich diese DLL nicht.
    Wenn ein Namespace nicht enthalten ist, dann sind auch die darunter enthaltenen Klassen nicht in der DLL.
    Kann es sein, daß Du den Namespace falsch geschrieben hast?
    Normalerweise kannst Du mit dem ILSpy schauen, was in Deiner DLL alles drinnen ist.
    Ich kann Dir da leider nicht weiterhelfen, da ich diese DLL nicht kenne und nicht weiß, was wo drinnen ist.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

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

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 15:10 #21615

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 307
  • Hallo Wolfgang,
    anscheinend paßt dann das C# Codebeispiel nicht zu meiner Gma.QrCodeNet.Encoding.dll. Wenn ich diese mit ILSpy betrachte, finde ich kein ..Windows.Controls aber dafür ein ..Windows.Render. Dafür gibt es auch C# Codebeispiele:
    QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
    QrCode qrCode = qrEncoder.Encode("Hello World!");
    GraphicsRenderer renderer = new GraphicsRenderer(new FixedModuleSize(5, QuietZoneModules.Two), Brushes.Black, Brushes.White);
    using (FileStream stream = new FileStream(@"c:\temp\HelloWorld.png", FileMode.Create))
                {
                    renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, stream);
                }
    Die ersten Zeilen würde ich so übersetzen:
    LOCAL qrEncoder AS QREncoder
    LOCAL qrCode AS QrCode
    LOCAL renderer AS GraphicsRenderer
    LOCAL fms AS FixedModuleSize
    	
    qrEncoder := QrEncoder{ErrorCorrectionLevel.H}
    qrCode := qrEncoder.Encode("Hello World!")
    renderer := GraphicsRenderer(fms := FixedModuleSize(5, QuietZoneModules.Two), System.Drawing.Brushes.Black, System.Drawing.Brushes.White)
    Aber was macht das using in den letzten Zeilen und wie schaut das in X# aus?

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

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 15:15 #21616

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3152
  • Hallo Franz,
    das using in C# wird in X# mit begin using ... end using übersetzt.
    Doku siehe hier:
    www.xsharp.eu/help/command_begin-using.html
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

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

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 16:26 #21617

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 307
  • Hallo Wolfgang,
    ich habs jetzt so übersetzt:
    USING Gma.QrCodeNet.Encoding
    USING Gma.QrCodeNet.Encoding.Windows.Render
    ...
    LOCAL qrEncoder AS QREncoder
    LOCAL qrCode AS QrCode
    LOCAL renderer AS GraphicsRenderer
    LOCAL fms AS FixedModuleSize
    LOCAL stream AS FileStream
    	
    qrEncoder := QrEncoder{ErrorCorrectionLevel.H}
    qrCode := qrEncoder.Encode("Hello World!")
    renderer := GraphicsRenderer{fms := FixedModuleSize{5, QuietZoneModules.Two}, System.Drawing.Brushes.Black, System.Drawing.Brushes.White}
    BEGIN USING VAR stream := FileStream{@"c:\tmp\TestQR.png", FileMode.Create}
    	renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, stream)
    END USING
    Da bekomme ich jede Menge Fehler, ich fürchte das wird nichts, also Deckel drauf und forget it, für ein Testprojekt aus Interesse ist mir der Aufwand zu hoch.

    Was mich wundert: dass noch niemand eine QRCode-Routine verwendet, die man in VO/X# Programme einbinden kann, wo doch überall danach verlangt wird (z.B. comp.lang.clipper.visual-objects)?

    Was aber trotzdem noch interessant wäre: wie man das ILSpy-X#-Plugin einbindet und einsetzt, da ich ja eine C# Dll habe, die diese Gma.QrCodeNet.Encoding.dll verwendet.

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

    Last edit: by lagraf.

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 16:29 #21618

    • ic2
    • ic2's Avatar


  • Posts: 1524
  • Hallo Franz,

    Du weisst dass DU den C#-Code (innerhalb derselben Solution als separates Projekt) behalten kann und Methoden einfach von X# aus aufrufen kann, als wäre es eine andere X#-Klasse? Das spart Umbauzeit.

    Dick

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

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 16:32 #21619

    • Fabrice
    • Fabrice's Avatar


  • Posts: 276
  • Hi Franz,
    sorry for the "strange" names....

    - ILSpy 5 plugin : This the XSharp language support for ILSpy 5.00
    - ILSpy 5.02 plugin : This one was the first version to support ILSpy 5.02
    - ILSpy502.XSharpLanguage.Plugin.dll.zip : This one is the latest version supporting ILSpy 5.02, with some issues solved.

    I suggested, that you get the Zip file with the binaires of the V6.2.1 : (Portable version, just unzip it)
    github.com/icsharpcode/ILSpy/releases/tag/v6.2.1

    Then, grab the XSharp Plugin, either from our Download Section or there :
    github.com/X-Sharp/ILSpy-Plugin/releases/tag/6.2.1.20201230
    Unzip the DLL in the same folder as ILSpy.exe

    Run ILSpy : You should have a ComboBoxList with the available languages : Xsharp should be there.

    Now, open your C# Dll/Exe (or drop it on the left TreeView) : You should see the Namespaces/classes/methods in the TreeView, and the XSharp Code on the right.

    HTH
    Fab

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

    Last edit: by Fabrice. Reason: Syntax

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 16:39 #21620

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3152
  • Hallo Franz,
    was bekommst Du für Fehler?
    Vielleicht fehlen die entsprechenden Using-Anweisungen?
    Anders als bei VO sind im .NET Framework die Klassen in Namespaces organisiert.
    Im XIDE-Editor kannst Du auf einer nicht erkannten Klasse einen Rechtsklick machen und "Search for type xxx in namespaces" wählen, und damit das passende Using-Statement ergänzen lassen.
    Und was den Bedarf an QR-Codes betrifft: die meisten werden diesen auf einem Druck benötigen, und ich nehme an, die meisten Drucktools bringen das von Haus aus mit, ebenso wie alle möglichen Internet-Libraries.
    Wolfgang
    P.S. es mag manchmal frustrierend sein, sich durch die Features des .NET Framework durchzukämpfen, aber es lohnt sich definitiv
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

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

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 16:53 #21621

    • Chris
    • Chris's Avatar


  • Posts: 3539
  • Hi Franz,

    I think it may sound extremely difficult, but once we find what's wrong, you will see it's actually extremely easy. It's just that it's a new environment that makes everything look complicated.

    I think what you haven't done, is add a reference to this dll, which is the equivalent of including a library in VO. Without it, X# has no idea you are trying to use this dll.

    Are you using XIDE or VS? Please let me know and I will give you directions on what to do. Or, if you'd like, please send me this dll and I will send you back a XIDE or VS project doing what you want.

    .
    XSharp Development Team
    chris(at)xsharp.eu

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

    Last edit: by Chris.

    Gma.QrCodeNet.Encoding.dll 21 Feb 2022 16:56 #21622

    • Fabrice
    • Fabrice's Avatar


  • Posts: 276
  • Hi Franz,
    personally I use the QRCoder package, but... it should be very near.

    The attached zip file is a very simple solution that use QRCoder as a Nuget Package, and generate a simple QRCode.
    USING System
    USING System.Collections.Generic
    USING System.Linq
    USING System.Text
    USING System.Drawing
    USING QRCoder
    
    FUNCTION Start() AS VOID STRICT
        Console.WriteLine("Hello World!")
    	//
    	LOCAL qrGen AS QRCodeGenerator
    	LOCAL qrData AS QRCodeData
    	LOCAL code AS QRCode
    	LOCAL codeImage AS Bitmap
    	//
    	qrGen :=  QRCodeGenerator{}
    	qrData := qrGen:CreateQrCode("The text which should be encoded.", QRCodeGenerator.ECCLevel.Q)
    	code := QRCode{qrData}
    	codeImage := code:GetGraphic(20)
    	//
    	codeImage:Save( "testQRCode.jpg" )
    	//
        Console.WriteLine("Press any key to continue...")
        Console.ReadKey()

    I hope you can find it usefull.

    Regards,
    Fab

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

    Last edit: by Fabrice. Reason: Syntax

    Gma.QrCodeNet.Encoding.dll 22 Feb 2022 10:45 #21630

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 307
  • Hi Fabrice
    Thank you for your detailed description, I installed newest version of ILSpy and your Plugin!
    Now I can go forward to look at the code of my C# DLL, which must include a routine to generate QR Codes.
    Franz

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

    Gma.QrCodeNet.Encoding.dll 22 Feb 2022 11:20 #21631

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 307
  • Hallo Wolfgang
    Ich habe die Using Anweisungen jetzt an eine andere Stelle platziert und damit erstmal die Fehler auf eine überschaubare Menge reduziert:
    USING Gma.QrCodeNet.Encoding
    USING Gma.QrCodeNet.Encoding.Windows.Render
    USING System.IO
    USING System.Drawing
    Nun habe ich noch 6 Fehler:
    error XS0120: An object reference is required for the non-static field, method, or property 'Gma.QrCodeNet.Encoding.QrEncoder.Encode(string)'
    error XS0136: A local or parameter named 'stream' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter
    error XS0211: Cannot take the address of the given expression
    error XS0120: An object reference is required for the non-static field, method, or property 'Gma.QrCodeNet.Encoding.QrCode.Matrix'
    error XS0103: The name 'ImageFormat' does not exist in the current context
    error XS0118: 'renderer' is a variable but is used like a type
    Das "LOCAL stream" muß man wahrscheinlich noch anders definieren wegen dem USING, denke ich.

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

    Last edit: by lagraf.

    Gma.QrCodeNet.Encoding.dll 22 Feb 2022 11:38 #21632

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3152
  • Hallo Franz,
    error XS0120: An object reference is required for the non-static field, method, or property 'Gma.QrCodeNet.Encoding.QrEncoder.Encode(string)'
    Die Methode Encode ist keine statische Methode, sondern muss auf eine existierendes Objekt angewendet werden
    error XS0136: A local or parameter named 'stream' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter
    Irgendwie hast Du eine lokale Variable "stream" schon weiter oben definiert - im using wird die dann nochmal definiert, und das funktioniert nicht. Nimm die oben raus.
    error XS0211: Cannot take the address of the given expression
    Da muss ich den Code sehen.
    error XS0120: An object reference is required for the non-static field, method, or property 'Gma.QrCodeNet.Encoding.QrCode.Matrix'
    Siehe oben, "Matrix" ist keine statische Variable, sondern muss auf ein Objekt angewendet werden.
    error XS0103: The name 'ImageFormat' does not exist in the current context
    es gibt keine definierte Variable ImageFormat
    error XS0118: 'renderer' is a variable but is used like a type
    da müsste ich den Code sehen.

    Ich habe so den Verdacht, dass Du nicht wirklich viel Ahnung von dem hast, was Du da probierst zu schreiben.
    Du solltest Dir auf jeden Fall mal diese Einträge durchlesen und verstehen:
    docs.xsharp.it/doku.php?id=namespace_assembly_reference
    docs.xsharp.it/doku.php?id=namespaces
    docs.xsharp.it/doku.php?id=assemblies

    Und vielleicht nochmal versuchen zu verstehen, was eine statische Methode in .NET ist.

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

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

    Moderators: wriedmann