在C#中实现OPOS设备

对于一些传统POS应用程序的互操作,我想知道是否有可能在C#中实现虚假的OPOS设备。

基本上我会实现一个虚假键盘,它接受Web请求并将按键传递给遗留应用程序。

有谁知道这是可能的还是在哪里获得文件? 我认为OPOS刚刚调用了由注册表项配置的COM对象。 所有这些都应该在C#中实现。

是的,这当然是可能的。

您可以开发一个OPOS SO(服务对象),它实现了COS中OPOS所期望的COM接口。 然后,这可以以您想要的任何方式实现API。

我建议你从http://monroecs.com/oposccos.htm下载Curtiss Monroe的OPOS通用控制对象。

这将为您提供为Service对象实现的类型库,并且可能包含一些指向OPOS文档的链接。 NB我认为OPOS使用后期绑定,因此您需要实现双接口。

需要注意的是:恕我直言OPOS在技术上是一个可怕的API,由委员会外围设备供应商设计,以揭示其外围设备的function,而不是为POS应用程序开发人员提供有用的抽象。

一个特别引人注目的例子是所谓的ToneIndicator设备,该设备暴露了富士通键盘中音调发生器的function,以发出不同音高和音量的两个音调的重复序列。

UPDATE

我之前已经实现了OPOS服务对象,但已经很长时间了。 这里有一些更多信息可以帮助您开始使用POSKeyboard SO。

  • Control对象(CO)将使用后期绑定加载您的服务对象(SO)。 所以实际上没有你实现的COM IID或类型库。 相反,您需要实现在相应版本的OPOS规范中定义的所有必需方法和事件(例如,本页面上的文档之一: http : //monroecs.com/oposreleases.htm )。 以下信息基于本页链接的1.6控制程序员指南(CPG)。

  • CPG的第2章描述了您需要实施的内容。 请注意,OPOS使用一种奇怪的方法来获取/设置属性。 虽然控制对象(CO)公开具有合理名称的属性(例如DeviceEnabled,DeviceName,DeviceDescription),但这些都调用相同的方法GetPropertyString(对于字符串属性)或GetPropertyNumber(对于整数属性),传递整数“属性索引”作为定义要检索哪个属性的参数。 “属性索引”都是在随OPOS标准提供的头文件中定义的。

  • 通过快速浏览CCO PosKeyboard源,您需要实现的方法名称列在源文件POSKeyboardImpl.cpp中的s_SOMethodNames中。

  • 您需要设置的注册表项在OPOS Application Programmer’s Guide(APG)附录“OPOS Registry Usage”中定义。 在您的情况下,您将需要创建一个注册表项HKLM \ OleForRetail \ ServiceOPOS \ POSKeyboard \ DefaultPOSKeyboard(其中DefaultPOSKeyboard是您传递Open方法的设备名称)。 此注册表项需要具有默认值,即SO类的ProgId。 您还可以在其中存储其他值(例如,您的SO使用的配置信息)。

祝你好运 – 这将是一个痛苦的过程,有很多WTF。