Interfacciamento tra software c e software c#

di vale88 il
13 risposte

Sto utilizzando una stampante Dymo 550, probabilmente mi servirà un interfacciamento tra software c e software c#, cosa mi consigliate? grazie

13 Risposte

  • 06/02/2023 - vale88 ha scritto:


    Sto utilizzando una stampante Dymo 550, probabilmente mi servirà un interfacciamento tra software c e software c#, cosa mi consigliate? grazie

    Il primo consiglio è quello di non duplicare le discussioni, visto che hai aperto una problematica analoga anche qui, tra l'altro senza specificare nessun dettaglio riguardo il problema.

    Pur comprendendo il sentimento di chi deve risolvere un problema e la necessità di chiedere aiuto, “buttare in questo modo la palla” sul forum citando un modello di stampante e limitarsi a dire “devo lavorarci”, peraltro in duplice copia, non è senz'altro un modo consono di affrontare la questione.

  • Ho cancellato l'altra discussione

  • Dire

    mi servirà un interfacciamento tra software c e software c#

    non vuol dire niente! 

    Codice C deve chiamare codice C#?

    Codice C# deve chiamare codice C? 

    Ti serve una comunicazione bidirezionale? 

    Ci sono n-mila soluzioni, ogn'una adatta ad un particolare caso, con pro e contro, più o meno complesse…

    Comunque anche no:

    https://developers.dymo.com/

  • Come accennato, dipende da cosa intendi. Devi essere più specifica.

    Hai una DLL da utilizzare?

    Del codice sorgente C?

  • Ho letto la guida riguardo i driver che bisogna utilizzare per l'utilizzo della stampante..ancora devo iniziare a fare delle prove, nel frattempo scaricherò il driver

  • Quindi la tua domanda che senso aveva?

  • Ho trovato il codice in c# che fa al mio caso..ora però non riesco a trovare le librerie adatte, ho trovato sdk in java e visual basic, ma non in c#

     private void Print()
            {
                var myDymoAddin = new DymoAddIn();
                var myLabel = new DymoLabels();
                if (myDymoAddin.Open(@"c:\temp\inventory.label"))
                {
                    myLabel.SetField("part_num", txtPartNumber.Text);
                    myLabel.SetField("serial_num", txtSerialNum.Text);
                    myDymoAddin.StartPrintJob();
                    myDymoAddin.Print(1, false);
                    myDymoAddin.EndPrintJob();
                }
                
            }
  • Devi usare il funzionamento per Visual Basic anche con C#. 

    Il manuale dice che ci sono 2 modi per usare la stampante : mediante COM (Component Object Model) che va bene per VB e C#, oppure mediante la DLL, piu' complicato, ma ‘se po’ fa'. 

    Purtroppo entrambe richiedono una programmazione un po' piu' ‘arzigogolata’ (in pratica: e' complicato) .

    Al momento aiutarti e' impossibile se non avendo una stampante sottomano e sperimentando direttamente.

    https://dokumen.tips/download/link/dymo-label-software-sdk-manual.html

    (non e' il manuale originario ma mi aspetto non sia cambiato piu' di tanto) 

  • COM Component non Common

  • Opps: l'ora  e l'eta' si fanno sentire ;-)

  • 08/02/2023 - migliorabile ha scritto:


    Devi usare il funzionamento per Visual Basic anche con C#. 

    Il manuale dice che ci sono 2 modi per usare la stampante : mediante COM (Component Object Model) che va bene per VB e C#, oppure mediante la DLL, piu' complicato, ma ‘se po’ fa'. 

    Purtroppo entrambe richiedono una programmazione un po' piu' ‘arzigogolata’ (in pratica: e' complicato) .

    Al momento aiutarti e' impossibile se non avendo una stampante sottomano e sperimentando direttamente.

    https://dokumen.tips/download/link/dymo-label-software-sdk-manual.html

    (non e' il manuale originario ma mi aspetto non sia cambiato piu' di t

    Ho trovato un'applicazione in c# che potrebbe risolvere il mio problema, e ho anche scaricato Dymo.sdk.. il problema è che ora ho un errore:


    Error CS0012 The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. WPFSDKSample C:\Users\VDS\Desktop\cartella\DCD-SDK-Sample-master\WPF\WPFSDKSample\ViewModels\MainViewModel.cs 22 Active

  • 08/02/2023 - vale88 ha scritto:


    il problema è che ora ho un errore

    Non fosse che il messaggio di errore ti suggerisce già la soluzione da adottare….. :)

  • Sì infatti con l'utilizzo della libreria giusta sono riuscita a togliere parecchi errori, avrei però bisogno di un vostro parere, visto che non sono un'esperta di c# e nemmeno di stampanti dymo 550…

    Questo codice l'ho trovato in internet, è un'app per l'utilizzo della stampante dymo, quello però che mi sfugge è che le variabili SelectedPrinter e SelectedLabelObject non siano valorrizzate e quindi mi danno errore..secondo il vostro parere è un errore del codice, cioè il programmatore che ha scritto questo codice non ha valorizzato le variabili o può essere che io non abbia qualche libreria specifica? grazie

    Comunque ho provato a inizializzare le variabili e ho tolto parecchi errori ma non so se è la strada giusta, questo è il codice originario

    using DymoSDK.Implementations;
    using Microsoft.Win32;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    
    namespace WPFSDKSample.ViewModels
    {
        public class MainViewModel : BaseViewModel
        {
      
            DymoSDK.Interfaces.IDymoLabel dymoSDKLabel;
            public MainViewModel()
            {
                DymoSDK.App.Init();
                dymoSDKLabel = DymoLabel.Instance;
                Printers = DymoPrinter.Instance.GetPrinters();
                TwinTurboRolls = new List<string>() { "Auto", "Left", "Right" };
            }
            /// <summary>
            /// Open a Dymo label file and load the content in the instance of the class
            /// Get the preview image of the label
            /// Get the list of object names
            /// </summary>
            private void OpenFileAction()
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Filter = "DYMO files |*.label;*.dymo|All files|*.*";
    
                if (openFileDialog.ShowDialog() == true)
                {
                    FileName = openFileDialog.FileName;
                   // DymoSDK.App.Init();
                    //Load label from file path
                    dymoSDKLabel.LoadLabelFromFilePath(FileName);
                    //Get image preview of the label
                    dymoSDKLabel.GetPreviewLabel();
                    //Load image preview in the control 
                    ImageSourcePreview = LoadImage(dymoSDKLabel.Preview);
                    //Get object names list
                    LabelObjects = dymoSDKLabel.GetLabelObjects().ToList();
                }
            }
            /// <summary>
            /// Print the current loaded label using the selected printer name
            /// </summary>
            private void PrintLabelAction()
            {
                int copies = 1;
                if (SelectedPrinter != null)
                {
                    //Send to print
                    if (SelectedPrinter.Name.Contains("Twin Turbo"))
                    {
                        int rollSel = SelectedRoll == "Auto" ? 0 : SelectedRoll == "Left" ? 1 : 2;
                        DymoPrinter.Instance.PrintLabel(dymoSDKLabel, SelectedPrinter.Name, copies, rollSelected: rollSel);
                    }
                    else
                        DymoPrinter.Instance.PrintLabel(dymoSDKLabel, SelectedPrinter.Name, copies);
    
                    //If the label contains counter objects
                    //Update counter object and preview to show the incresead value of the counter
                    var counterObjs = dymoSDKLabel.GetLabelObjects().Where(w => w.Type == DymoSDK.Interfaces.TypeObject.CounterObject).ToList();
                    if (counterObjs.Count > 0)
                    {
                        foreach (var obj in counterObjs)
                            dymoSDKLabel.UpdateLabelObject(obj, copies.ToString());
                        UpdatePreviewAction();
                    }
                }
            }
            /// <summary>
            /// Update the object value using the object name selected
            /// </summary>
            private void UpdateValueAction()
            {
                if (SelectedLabelObject != null)
                {
                    //Update label object value
                    dymoSDKLabel.UpdateLabelObject(SelectedLabelObject, ObjectValue);
                    UpdatePreviewAction();
                }
            }
Devi accedere o registrarti per scrivere nel forum
13 risposte