扫码驱动器在哪里_uos安装扫描仪驱动

扫码驱动器在哪里_uos安装扫描仪驱动记录一下Opos扫码驱动开发的过程,太少搞COM组件相关的了,很难查到相关材料,新手一开始很难。 Opos全称OLE for Retail POS,该标准使用组件对象模型,因此,支持COM控件的所有语言(即 Visual C++,Visual Basic和C#)可用于编写应用程序。就是按行业标准约定

扫码驱动器在哪里_uos安装扫描仪驱动

  记录一下Opos扫码驱动开发的过程,太少搞COM组件相关的了,很难查到相关材料,新手一开始很难。 

  Opos全称OLE for Retail POS,该标准使用组件对象模型,因此,支持COM控件的所有语言(即 Visual C++,Visual Basic和C#)可用于编写应用程序。就是按行业标准约定的接口,生成不同设备的控件。与扫码设备相关的控件为OPOSScanner.ocx。可以查找相关接口和开发文档进行应用软件开发。调用OPOSScanner.ocx的应用软件简称为exe,下载OPOSScanner.ocx在PC端注册后,使用约定的接口即可实现exe对OPOSScanner控件的调用,但是OPOSScanner接口关联的扫码设备的实际功能还需要开发一个组件支持,这里我用的是ATL,生成文件为DLL。同样的DLL也需要在PC端注册。这样,exe调用OPOSScanner的open标准接口,OPOSScanner的open标准接口再调用DLL的实际实现,达到打开扫码设备的功能。调用方式并非习惯的加载DLL后根据头文件使用接口函数,而是将ocx和atl在PC上注册到注册表,利用InvokeHelper或Invoke来查询组件的接口id。具体的技术细节不太懂,应该是基于跨语言的目的,生成的组件能在不同语言中调用,需要了解的可以去查查资料。

  应用软件的demo,可以参考OPOS-Scanner-and-Scale-Sample-App的SampleApp_OPOS_Scanner工程。改动SampleApp_OPOS_Scanner加载的ocx的GetClsid,加载目标ocx控件后,通过InvokeHelper函数调用标准接口。OPOSScanner.ocx的标准接口,查看github的OPOS-CCO工程ScannerImpl文件可知。在ocx内部,通过exe选择要加载的ATL名称,ocx在注册表中查询相关名称,再从子键找到CLSID,利用CLSID加载ATL DLL,Invoke调用ATL中实现功能的函数。OPOSScanner.ocx作为标准控件,不需要做任何修改。重点在ATL的驱动开发和exe的功能开发。

  ATL的开发就是Opos扫码设备的驱动,生成为DLL。需要结合OPOSScanner.ocx的标准接口内Invoke的调用,设定idl文件的接口id和接口参数,否则ocx无法顺利调用atl生成的组件。实现ATL后,exe调用ocx,ocx再调用atl,atl内部实现对扫码设备的控制就基本实现了。剩下还有一个难题,就是扫码设备是由ATL直接控制,扫码数据也是直接返回到ATL这一层,需要最终传回exe层显示。ATL无法直接调用ocx和exe的接口,而ocx是exe加载的,只能在exe调用ocx标准接口获取数据,ocx再调用ATL取得数据。因此,需要ATL在有数据的时候通知exe,再由exe调用去获取数据。但是如果在ATL触发事件,exe接收的话,就跳过了中间ocx标准控件,失去了按照标准接口使用,不需要针对单独ATL开发的意义。所以,实际是ATL通过postmessage通知ocx的窗口,ocx接收后触发消息FireEvent到exe,exe响应事件,再调用ocx标准接口获取数据。ocx作为中间的标准接口,上层的exe只要考虑相关接口和需要的功能,而ATL只要考虑和ocx的数据传递,不能直接和exe传输数据。

今天的文章扫码驱动器在哪里_uos安装扫描仪驱动分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/54127.html

(0)
编程小号编程小号
上一篇 2023-08-29
下一篇 2023-08-29

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注