如何创建 OPOS 服务对象虚拟打印机 - 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

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


在回复评论时添加:

  1. 该属性在 OPOS PosPrinter 内部和 OPOS 内部 ENUM 中的定义是什么?
    从名字上,我找不到那是什么意思?
    • 以下部分基于 C ++ 创建的服务对象的包含文件 (OPOSyyyy.hi) 中描述的属性名称和索引值定义,该文件包含在 CCO(通用控制对象)中。
  • 设备通用属性:OPOS_Internals.PIDX_pppp(pppp中的属性名称)
  • 设备特定属性:OPOSxxxxInternals.PIDXyyyy_pppp(xxxx中的OPOS设备类名,yyyy中设备类名的缩写,pppp中的属性名)
  1. 对于 VirtualPrinter 而不是 PhysicalPrinter,该类中定义的哪些功能应该实现为必不可少的?
    在我们只处理虚拟打印机的打印命令的情况下。

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

    • 关于以下内容。是的,确实如此。
  • 在 OpenService 方法的实现中,通过准备一个动态类型变量,保存一个指向作为参数传递的 CO 的 IDispatch 对象的指针,并将其用于事件通知。