문제

C#에서 USB POS 프린터를 가장 잘 구동 할 수있는 아이디어. POS 프린터는 일반적으로 직렬, TCP/IP 또는 USB 기반입니다. 직렬 및 TCP/IP를 달성하는 방법을 알고 있지만 C#의 USB를 통한 통신에 대해 전혀 모릅니다. Microsoft에서 Pos.net이라는 레이어가 있다는 것을 알고 있지만이를 사용하지 않으려 고합니다. 사람들이 추천 할 수있는 모든 아이디어 나 C# 라이브러리는 정말 감사 할 것입니다. 감사

도움이 되었습니까?

해결책

.NET 및 OPOS 또는 .NET Service Objects 용 POS를 사용하는 것을 고려해야합니다 (예 : Epson은 두 가지를 제공합니다). .NET 용 POS는 이러한 장치와의 인터페이스를위한 Unifiedpos 산업 표준을 준수합니다.

다른 팁

프린터가 인간 인터페이스 장치로 등록하는 경우 p/적절한 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 Guys의 Win32 USP API에 대한 C# 래퍼가 있습니다. 여기, 그리고 나는 적어도 보았습니다 하나 .NET의 USB 물건에 대한 기타 참조.

까다로울 수있는 것은 프린터가 작동하기 위해 OPOS를 필요로하는지 여부입니다. 나는 몇 년 전에 .NET의 POS 프로젝트에 대해 약간의 작업을 수행했으며, 내가 기억하는 것에서 OPOS는 사물의 하드웨어 측면에 대한 표준입니다 (모든 OPOS API는 COM Interop을 사용했습니다). 이 장치에는 때때로 문서화 된 독점 통신 프로토콜이 있으며,이 경우 USB 라이브러리를 사용하여 장치와 대화하기 위해이를 활용할 수 있어야합니다.

이미 자신의 프린터 제어 코드를 롤링 한 경우 USB 포트의 "일반 / 텍스트"프린터 드라이버를 사용하여 프린터를 설정하여 명령을 프린터로 바로 전달할 수 있습니다. 해당 드라이버는 제어 코드를 다시 해석하지 않고 인쇄하려고 시도하지 않지만 프린터로 전달합니다.

그런 다음 USB 포트는 다른 프린터와 마찬가지로 사용할 수 있습니다.

이 접근법은 내가 개발 한 POS 시스템에서 저에게 효과적이었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top