对于与旧版 POS 应用程序的某些互操作,我想知道是否可以在 C# 中实现虚假的 OPOS 设备。
基本上我会实现一个假键盘,它接受网络请求并将按键传递给遗留应用程序。
有谁知道这是否可能或在哪里可以获得文档?我认为 OPOS 只是调用由注册表项配置的 COM 对象。所有这些都应该可以用 C# 实现。
是的,这当然有可能。
您可以开发一个 OPOS SO(服务对象),它在 C# 中实现 OPOS 所需的 COM 接口。然后可以按照您想要的任何方式实现 API。
我建议您从以下位置下载 Curtiss Monroe 的 OPOS 通用控制对象http://monroecs.com/oposccos.htm http://monroecs.com/oposccos.htm.
这将为您提供为服务对象实现所需的类型库,并且可能有一些 OPOS 文档的链接。注意:我认为 OPOS 使用后期绑定,因此您需要实现双重接口。
需要注意的是:恕我直言,OPOS 在技术上是一个糟糕的 API,由外围设备供应商委员会设计,目的是公开其外围设备的功能,而不是为 POS 应用程序开发人员提供有用的抽象。
一个特别引人注目的例子是所谓的 ToneIndicator 设备,它展示了富士通键盘中音调发生器的功能,可以重复发出两种不同音高和音量的音调序列。
UPDATE
我之前已经实现过OPOS服务对象,但是已经很久了。这里有一些更多信息可以帮助您开始使用 POSKeyboard SO。
控制对象 (CO) 将使用后期绑定加载您的服务对象 (SO)。因此实际上您没有实现任何 COM IID 或类型库。相反,您需要实现适当版本的 OPOS 规范中定义的所有必需方法和事件(例如本页上的文档之一:http://monroecs.com/oposreleases.htm 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 应用程序程序员指南 (APG) 附录“OPOS 注册表用法”中定义。在您的情况下,您需要创建一个注册表项 HKLM\OleForRetail\ServiceOPOS\POSKeyboard\DefaultPOSKeyboard (其中 DefaultPOSKeyboard 是您要传递给 Open 方法的设备名称)。该注册表项需要有一个默认值,即 SO 类的 ProgId。您还可以在那里存储其他值(例如 SO 使用的配置信息)。
祝你好运——这将是一个痛苦的过程,有很多WTF。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)