Реализуйте устройство OPOS в C#

В Swift 5 большое спасибо @ Adrian за ответ

extension UITableView{

    func hasRowAtIndexPath(indexPath: IndexPath) -> Bool {
        return indexPath.section < numberOfSections && indexPath.row < numberOfRows(inSection: indexPath.section)
    }

    func scrollToTop(_ animated: Bool = false) {
        let indexPath = IndexPath(row: 0, section: 0)
        if hasRowAtIndexPath(indexPath: indexPath) {
            scrollToRow(at: indexPath, at: .top, animated: animated)
        }
    }

}

Использование:

tableView.scrollToTop()
9
задан jonathanpeppers 2 July 2009 в 18:52
поделиться

1 ответ

Да, конечно, возможно.

Вы можете разработать OPOS SO (Service Object), который реализует COM-интерфейс, ожидаемый OPOS на C #. Затем это может реализовать API любым способом.

Я предлагаю вам загрузить общие управляющие объекты OPOS Curtiss Monroe с http://monroecs.com/oposccos.htm .

Это даст Вам нужны библиотеки типов, которые необходимо реализовать для объекта (ов) службы, и, вероятно, есть ссылки на документацию OPOS. NB Я думаю, что OPOS использует позднее связывание, поэтому вам нужно будет реализовать двойной интерфейс.

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

Особенно ярким примером этого является так называемое устройство ToneIndicator, которое демонстрирует возможности тон-генератора в клавиатуре Fujitsu для воспроизведения повторяющейся последовательности из двух тонов разной высоты и громкости.

ОБНОВЛЕНИЕ

Я реализовывал объекты службы OPOS и раньше, но это было давно. Вот еще некоторая информация, которая поможет вам начать работу с POSKeyboard SO.

  • Объект Control (CO) загрузит ваш Service Object (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.

  • 12114] Записи реестра, которые необходимо настроить, определены в OPOS Application Programmer. s Приложение к Руководству (APG) «Использование реестра OPOS». В вашем случае вам нужно будет создать раздел реестра HKLM \ OleForRetail \ ServiceOPOS \ POSKeyboard \ DefaultPOSKeyboard (где DefaultPOSKeyboard - это имя устройства, которое вы передаете в метод Open). Этот раздел реестра должен иметь значение по умолчанию, которое является ProgId вашего класса SO. Вы также можете хранить там другие значения (например, информацию о конфигурации, используемую вашим SO).

Удачи с этим - это будет болезненный процесс с большим количеством WTF.

12
ответ дан 4 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

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