如何创建 OPOS 服务对象虚拟打印机 - C#

How to create a OPOS Service Object virtual printer - c#

我希望为 POS 应用程序构建 OPOS 服务对象 (SO) 虚拟打印机以捕获购物收据。如果有人可以建议如何创建服务对象的步骤,我们将不胜感激。

总的来说,回答这个问题所需的信息量很大,很难很快回答。

所以这里主要是相关资料​​的链接
请将这些作为学习和工作的参考。

我的 GitHub.
上有与设备无关的简单介绍说明 kunif/OposInternals

除此之外,它既不是 C# 也不是 POSPrinter,但是 GitHub.
上有 VC++ 的 ATL 的 MSR SO 框架 RichardChambers/atl_msr_so

这里是关系中使用的属性。
ComVisibleAttribute Class
GuidAttribute Class
InterfaceTypeAttribute Class
ComRegisterFunctionAttribute Class
ComUnregisterFunctionAttribute Class

这是评论文章的table内容,包括其背后的机制。
Interoperability (C# Programming Guide)
Advanced COM Interoperability


为回应评论而添加:

  1. 属性 在 OPOS PosPrinter internals 和 OPOS internals ENUM 中定义的定义是什么?
    从名字上,我找不到那是什么意思?
    • 以下部分基于属性包含文件(OPOSyyyy.hi)中描述的用于C++创建的服务对象的名称和索引值定义,包含在CCO(公共控制对象)。
  • Device common property: OPOS_Internals.PIDX_pppp (property name in pppp)
  • Device specific property: OPOSxxxxInternals.PIDXyyyy_pppp (OPOS device class name in xxxx, abbreviation for device class name in yyyy, property name in pppp)
  1. 对于 VirtualPrinter 而不是 PhysicalPrinter,class 中定义的哪些功能应该作为必要的实现?
    在我们只处理虚拟打印机的打印命令的情况下。

    • 这不取决于虚拟打印机因素,而是取决于应用程序使用的方法 属性 事件。
    • 如果您的应用程序使用的功能不受您的虚拟打印机支持,您的应用程序将检测到异常并停止处理。
  2. 你写的这句“save a pointer to the CO's IDispatch .... event notification”是把“pDispatch”保存到这个class吗?

    • 关于以下内容。是的,是的。
  • In the implementation of the OpenService method, save a pointer to the CO's IDispatch object passed as a parameter by preparing a dynamic type variable and use it for event notification.