Как создать виртуальный принтер OPOS Service Object - С#

Я хочу создать виртуальный принтер OPOS Service Object (SO) для приложения POS для захвата квитанций о покупках. Если бы кто-нибудь мог посоветовать шаги по созданию объекта службы, мы были бы очень признательны.


person Shahryar Faraji    schedule 28.12.2020    source источник


Ответы (1)


В целом, объем информации, необходимой для ответа на этот вопрос, настолько велик, что трудно ответить коротко.

Поэтому здесь представлены в основном ссылки на соответствующую информацию.
Пожалуйста, используйте их в качестве справочной информации для обучения и работы.

У меня есть независимое от устройства и простое вводное описание на моем GitHub.
kunif/OposInternals

В остальном это не C# и не POSPrinter, но на GitHub есть скелет MSR SO от ATL VC++.
Ричард Чемберс/atl_msr_so

Вот атрибуты, используемые в отношении.
Класс ComVisibleAttribute
Класс GuidAttribute
Класс InterfaceTypeAttribute
Класс ComRegisterFunctionAttribute
Класс ComUnregisterFunctionAttribute

Это оглавление статьи с комментариями, включая лежащий в ее основе механизм.
Взаимодействие (Руководство по программированию на C#)
Расширенная совместимость с COM


Добавлено в ответ на комментарии:

  1. What is the definition of that property defines in the OPOS PosPrinter internals and OPOS internals ENUM?
    From the name, I can not find what is the meaning of that?
    • The following part is based on the property name and index value definitions described in the include file(OPOSyyyy.hi) for Service Objects created in C ++, which is included in the CCO (Common Control Objects).
  • Общее свойство устройства: OPOS_Internals.PIDX_pppp (имя свойства в pppp)
  • Свойство устройства: OPOSxxxxInternals.PIDXyyyy_pppp (имя класса устройства OPOS в xxxx, аббревиатура имени класса устройства в yyyy, имя свойства в pppp)
  1. Для VirtualPrinter, а не для PhysicalPrinter, какие функции, определенные в этом классе, должны быть реализованы как важные?
    В случае мы обрабатываем только команды печати виртуального принтера.

    • It depends not on the virtual printer factor, but on what method property event the application is using.
    • Если функция, используемая вашим приложением, не поддерживается вашим виртуальным принтером, ваше приложение обнаружит аномалию и прекратит обработку.
  2. Сохраняет ли это предложение, которое вы пишете, указатель на CO IDispatch .... уведомление о событии означает сохранение pDispatch в этом классе?

    • About the following. Yes, it is.
  • В реализации метода OpenService сохраните указатель на объект IDispatch CO, переданный в качестве параметра, подготовив переменную динамического типа, и используйте ее для уведомления о событии.
person kunif    schedule 30.12.2020
comment
Привет, Куниф, спасибо за полезные ссылки. У меня есть несколько других вопросов: 1. Каково определение того свойства, которое определяется во внутренних компонентах OPOS PosPrinter и внутренних компонентах OPOS ENUM? По названию не могу найти что это значит? 2. Для VirtualPrinter, а не для PhysicalPrinter, какие функции, определенные в этом классе, должны быть реализованы как необходимые? В случае мы обрабатываем только команды печати виртуального принтера. 3. Сохраняет ли это предложение, которое вы пишете, указатель на IDispatch CO.... уведомление о событии означает сохранение pDispatch в этом классе? Ура, С. - person Shahryar Faraji; 05.01.2021
comment
Спасибо, Куниф, у меня есть еще один вопрос: возможно ли, чтобы наш виртуальный принтер мог обрабатывать только команду печати и передавать другие команды другому физическому принтеру OPOS? - person Shahryar Faraji; 05.01.2021
comment
Вам решать, как создать объект службы, что делать. Однако, в отличие от случая прямого использования принтера, который должен собрать команду ESCPOS и отправить ее напрямую, POS-принтер OPOS работает в сотрудничестве с различными настройками и функциями, поэтому он не будет работать только путем имитации нескольких функций. - person kunif; 05.01.2021