C#에서 USB를 통해 POS 프린터를 구동 [폐쇄
-
06-07-2019 - |
문제
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 시스템에서 저에게 효과적이었습니다.