Управляйте принтером POS через USB в [закрытом] c#

sizeof(cstring*)*pcount слишком мало. Расчет размера ошибочен.


Избегайте ошибок выделения. Используйте эту идиому для кода, который легче писать правильно, просматривать и поддерживать. Обратите внимание, что не используется тип .

pointer = malloc(sizeof *pointer * n);

Тогда код становится:

// options = malloc(sizeof(cstring*)*pcount);
options = malloc(sizeof *options * pcount);`
5
задан Jonas 6 April 2010 в 18:20
поделиться

4 ответа

Необходимо действительно рассмотреть использование POS для.NET и OPOS или объектов службы.NET (Epson, например, предоставляет обоим). НА МЕСТЕ ПРОДАЖИ для.NET соответствует промышленному стандарту UnifiedPOS для взаимодействия через интерфейс с этими устройствами.

4
ответ дан 14 December 2019 в 04:51
поделиться

Если принтер регистрирует себя как Устройство Интерфейса пользователя, Вы можете P/INVOKE в соответствующие API Win32. Вот подписи:

    [ 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 );
2
ответ дан 14 December 2019 в 04:51
поделиться

Существует обертка C# для API Win32 USP от icsharpcode парней здесь, и я видел по крайней мере еще одну ссылку на материал USB в .NET.

То, что может быть хитрым, - требует ли Принтер OPOS для функционирования. Я сделал некоторую работу над проектом POS в .NET несколько лет назад, и от того, что я помню, что OPOS является в значительной степени стандартом для аппаратной стороны вещей (И в то время все API OPOS, используемые взаимодействующий с COM). Устройства иногда также имеют зарегистрированный собственный коммуникационный протокол, в этом случае необходимо смочь использовать это, чтобы говорить с устройством, пользующимся библиотекой USB.

1
ответ дан 14 December 2019 в 04:51
поделиться

Если Вы уже прокрутили свой собственный код управления принтера затем, можно передать команды прямо через принтеру путем установки принтера с помощью "Дженерика / текст" драйвер принтера на USB-порте. Тот драйвер не даст иное толкование кодам управления и попытается распечатать их, но он просто передаст их к принтеру как есть.

Затем USB-порт может использоваться точно так же, как любой другой принтер.

Этот подход работал на меня в системе POS, которую я разработал.

1
ответ дан 14 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: