Domanda

Qualche idea su come posso guidare al meglio una stampante POS USB da c #. Le stampanti POS sono generalmente seriali, basate su TCP / IP o USB. So come realizzare seriale e TCP / IP ma non ho idea delle comunicazioni tramite USB in C #. So che esiste un livello disponibile da Microsoft chiamato POS.NET, ma voglio provare a evitarlo. Tutte le idee o le librerie C # che le persone possono consigliare sarebbero davvero apprezzate. Grazie

È stato utile?

Soluzione

Dovresti davvero considerare l'utilizzo di POS per .NET e OPOS o oggetti di servizio .NET (Epson, ad esempio, fornisce entrambi). POS per .NET è conforme allo standard di settore UnifiedPOS per l'interfaccia con questi dispositivi.

Altri suggerimenti

Se la stampante si registra come dispositivo di interfaccia umana, è possibile P / INVOKE nelle API Win32 appropriate . Ecco le firme:

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_FlushQueue( SafeFileHandle HidDeviceObject );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_FreePreparsedData( ref IntPtr PreparsedData );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_GetAttributes(  SafeFileHandle HidDeviceObject
                       , ref HIDD_ATTRIBUTES Attributes );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_GetFeature(  SafeFileHandle HidDeviceObject
                    , ref Byte lpReportBuffer
                    , Int32 ReportBufferLength );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_GetInputReport( SafeFileHandle HidDeviceObject
                        ,ref Byte lpReportBuffer
                        ,Int32 ReportBufferLength );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern void HidD_GetHidGuid( ref System.Guid HidGuid );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_GetNumInputBuffers(  SafeFileHandle HidDeviceObject
                            , ref Int32 NumberBuffers );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_GetPreparsedData( SafeFileHandle HidDeviceObject
                          ,ref IntPtr PreparsedData );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_SetFeature(  SafeFileHandle HidDeviceObject
                    , ref Byte lpReportBuffer
                    , Int32 ReportBufferLength );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_SetNumInputBuffers( SafeFileHandle HidDeviceObject
                            ,Int32 NumberBuffers );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_SetOutputReport( SafeFileHandle HidDeviceObject
                         ,ref Byte lpReportBuffer
                         ,Int32 ReportBufferLength );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Int32 
    HidP_GetCaps( IntPtr PreparsedData, ref HIDP_CAPS Capabilities );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Int32 
    HidP_GetValueCaps(  Int16 ReportType
                      , ref Byte ValueCaps
                      , ref Int16 ValueCapsLength
                      , IntPtr PreparsedData );

Esiste un wrapper C # per API USP Win32 dei ragazzi icsharpcode qui e Ho visto almeno uno altro riferimento a Roba USB in .Net.

Ciò che può essere difficile è se la stampante richiede o meno OPOS per funzionare. Alcuni anni fa ho lavorato su un progetto POS in .Net e da quello che ricordo OPOS è praticamente lo standard per il lato hardware delle cose (e al momento tutte le API OPOS utilizzavano l'interoperabilità COM). I dispositivi a volte hanno anche un protocollo di comunicazione proprietario documentato, nel qual caso dovresti essere in grado di utilizzarlo per parlare con il dispositivo utilizzando la libreria USB.

Se hai già inserito il tuo codice di controllo della stampante, puoi passare i comandi direttamente alla stampante impostando la stampante usando " Generic / Text " driver della stampante sulla porta USB. Quel driver non reinterpreterà i codici di controllo e proverà a stamparli, ma li passerà alla stampante così com'è.

Quindi la porta USB può essere utilizzata come qualsiasi altra stampante.

Questo approccio ha funzionato per me su un sistema POS che ho sviluppato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top