在C#中实现OPOS设备

时间:2009-07-02 18:52:44

标签: c# com opos

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

基本上我会实现一个假冒键盘,它接受网页请求并将按键传递给传统应用程序。

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

1 个答案:

答案 0 :(得分:12)

是的,这当然是可能的。

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

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

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

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

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

<强>更新

之前我已经实现了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。