任何想法如何最好地从c#驱动USB POS打印机。 POS打印机通常是串行,TCP / IP或USB。 我知道如何完成串行和TCP / IP,但不知道在C#中通过USB进行通信。 我知道微软有一个名为POS.NET的图层,但我想尽量避免使用它。 任何想法或人们可以推荐的任何C#库都会非常感激。感谢

有帮助吗?

解决方案

您应该考虑使用POS for .NET和OPOS或.NET服务对象(例如Epson提供这两者)。 POS for .NET符合UnifiedPOS行业标准,可与这些设备连接。

其他提示

如果打印机将自身注册为人机接口设备,您可以 P / INVOKE到适当的Win32 API 。以下是签名:

    [ 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 );

来自icsharpcode人员的Win32 USP api的C#包装器此处,以及我至少看过一个其他参考.Net中的USB内容。

可能棘手的是打印机是否需要OPOS才能运行。几年前我在.Net的一个POS项目上做了一些工作,从我记得OPOS几乎是硬件方面的标准(当时所有OPOS API都使用COM互操作)。这些设备有时也有一个记录在案的专有通信协议,在这种情况下,您应该能够利用它与USB库进行通信。

如果您已经推出了自己的打印机控制代码,那么您可以通过使用“Generic / Text”设置打印机直接将命令传递给打印机。 USB端口上的打印机驱动程序。该驱动程序不会重新解释控制代码并尝试打印它们,但它只是将它们按原样交给打印机。

然后可以像使用任何其他打印机一样使用USB端口。

这种方法适用于我开发的POS系统。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top