Внедрить OPOS-устройство в C#
Для некоторого взаимодействия с унаследованным приложением POS мне было интересно, возможно ли реализовать фальшивое устройство OPOS в C#.
По сути, я бы реализовал фальшивую клавиатуру, которая принимала веб-запросы и передавала нажатия клавиш унаследованному приложению.
Кто-нибудь знает, возможно ли это или где взять документацию? Я полагал, что OPOS просто вызывает COM-объекты, которые настраиваются с помощью ключей реестра. Все это должно быть реализовано в C#.
1 ответ
Да, это возможно.
Вы можете разработать OPOS SO (Service Object), который реализует интерфейс COM, ожидаемый OPOS в C#. Это может затем реализовать API любым удобным для вас способом.
Я предлагаю вам скачать OPO Common Controls Curtiss Monroe с http://monroecs.com/oposccos.htm.
Это даст вам библиотеки типов, которые вы должны реализовать для своих объектов Service, и, возможно, будет иметь некоторые ссылки на документацию OPOS. NB. Я думаю, что OPOS использует позднюю привязку, поэтому вам нужно будет реализовать двойной интерфейс.
Предостережение: IMHO OPOS - это технически ужасный API, разработанный разработчиками периферийных комитетов для предоставления возможностей своих периферийных устройств, а не для предоставления полезной абстракции для разработчиков приложений для POS.
Особенно ярким примером этого является так называемое устройство ToneIndicator, которое предоставляет возможности генератора тонов на клавиатуре Fujitsu для воспроизведения повторяющейся последовательности из двух тонов разной высоты и громкости.
ОБНОВИТЬ
Я уже реализовывал OPOS Service Objects, но это было давно. Вот еще немного информации, чтобы начать работу с POSKeyboard SO.
Объект управления (CO) загрузит ваш сервисный объект (SO) с использованием позднего связывания. Так что на самом деле нет COM IID или библиотеки типов, которые вы реализуете. Вместо этого вам необходимо реализовать все необходимые методы и события, определенные в соответствующей версии спецификаций OPOS (например, один из документов на этой странице: http://monroecs.com/oposreleases.htm). Приведенная ниже информация основана на Руководстве по программированию 1.6 (CPG), указанном на этой странице.
Глава 2 CPG описывает, что вам нужно реализовать. Обратите внимание, что OPOS использует странный метод для получения / установки свойств. Принимая во внимание, что объект управления (CO) предоставляет свойства с разумными именами (например, DeviceEnabled, DeviceName, DeviceDescription), все они обращаются к одним и тем же методам GetPropertyString (для строковых свойств) или GetPropertyNumber (для целочисленных свойств), передавая целочисленный "индекс свойства" как аргумент, который определяет, какое свойство должно быть получено. "Индексы свойств" все определены в заголовочных файлах, поставляемых со стандартом OPOS.
Беглый взгляд на исходный код CCO PosKeyboard, имена методов, которые вам нужно реализовать, перечислены в s_SOMethodNames в исходном файле POSKeyboardImpl.cpp.
Записи реестра, которые необходимо настроить, определены в приложении OPOS "Руководство по программированию приложений" (APG Registry Usage). В вашем случае вам нужно будет создать раздел реестра HKLM\OleForRetail\ServiceOPOS\POSKeyboard\DefaultPOSKeyboard (где DefaultPOSKeyboard - это имя устройства, которому вы передаете метод Open). Этот раздел реестра должен иметь значение по умолчанию, которое является ProgId вашего класса SO. Вы также можете хранить другие значения (например, информацию о конфигурации, используемую вашей SO).
Удачи с этим - это будет болезненный процесс с большим количеством WTF.