【问题标题】:Implement OPOS Device in C#用 C# 实现 OPOS 设备
【发布时间】:2010-07-15 05:23:28
【问题描述】:

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

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

有谁知道这是否可行或从哪里获得文档?我认为 OPOS 只是调用由注册表项配置的 COM 对象。所有这些都应该可以在 C# 中实现。

【问题讨论】:

  • 你有没有让这个工作。我刚刚做了同样的事情,我的 C# 接口可以由一些公共控件对象实例化,但不能由其他对象实例化。谢谢。

标签: c# com opos


【解决方案1】:

是的,这当然是可能的。

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

我建议你从http://monroecs.com/oposccos.htm 下载 Curtiss Monroe 的 OPOS Common Control Objects。

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

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

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

更新

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

  • 控制对象 (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 应用程序程序员指南 (APG) 附录“OPOS 注册表使用”中定义。在您的情况下,您将需要创建一个注册表项 HKLM\OleForRetail\ServiceOPOS\POSKeyboard\DefaultPOSKeyboard (其中 DefaultPOSKeyboard 是您传递 Open 方法的设备名称)。此注册表项需要有一个默认值,即您的 SO 类的 ProgId。您还可以在其中存储其他值(例如您的 SO 使用的配置信息)。

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

【讨论】:

  • 太棒了!我想我的问题可能没有得到回答,因为 OPOS 已经很老了......我已经看了一段时间这个 monroecs 网站,它有很多信息(而且有点混乱),但不是我特别需要的。我还没有完全弄清楚:a)从哪个 dll 实现哪个 COM 接口(我假设是某种 POSKeyboard)b)如何注册我的 dll 以供 OPOS 使用(我知道 HKLM\OleForRetail\ServiceObjects 是这个地方,只需要一个文档)d)我终于想加载 POS 应用程序(它只使用 DefaultPOSKeyboard 的 LDN),并看到我的 C# 代码弹出一些 MessageBoxes
  • PS - 实现许多设备从 OPOS 配置应用程序实现的测试功能会很好。
  • “OPOS 配置应用” - 哪个配置应用?
  • 我能得到的答案非常好。这对我来说很有趣,如果成功了,我可能会将我的结果发布在 codeplex 上。
  • “可能特定于爱普生打印机”。是的,它是爱普生特有的。 OPOS 的另一个弱点是它没有提供配置服务对象的标准方法...
猜你喜欢
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多