虚拟电子秤之Atl实现02

这几天,一直在看OLE和ATL书,公司要上一个工业新项目,时间不是很紧,我准备用Flash连接C++解决。话说现在的Flash不比当年,大致看了一下AS3的语法,就是Java翻版,连FB4编译器也是eclipse改的。记得好像以前的Flash中可以嵌入COM组件,现在应该也可以吧,但是这个可能性坚定了我搞定ATL的决心。于是还是这个电子秤项目先入手。

电子秤是大众化的叫法,其实是由2个部分组成的,称重传感器和表头。称重传感器通过电桥将压力转换成mV信号,表头解析mV信号,将读数显示或传递给用户,虚拟电子秤模拟的是表头工作。

现在市场上带串口的电子秤表头主要有2中工作方式:

主动模式,表头按照用户设定的频率(比如一秒20次)将称重读数通过串口发送出去,它只管发送,不管用户是否收到。

被动模式,表头等待用户的指令(通过串口线),随后做出响应。用户可能要求读数,表头就将读数发送出去;用户也可能要求清零,表头照做,随后通知用户做好了。

虚拟电子秤有如下接口:

 

表头对象:CScaleXXX

IScaleSet 相当于操作面板,用于设置参数,min,max范围,波特率,当前重量,工作开关

IScaleRun 内部使用,被内部服务线程使用,用于解析传入的字符串,分析用户需求,将当前重量转换成字符串的形式,各个品牌的表头应该有一套独立的接口实现

IScaleThreadPort用于管理线程的生死,线程调用此接口回传IScaleThreadControl

 

自动服务线程对象:相当于表头里的发动机,用以监听端口,收发字符串,该线程由IScaleSet::Run()方法创建

IScaleThreadControl:类似于sink,用来接收表头对象传来的停机信号

 

昨天创建了表头对象,并且使用CComGITPtr和IGlobalInterfaceTable居然死机,后来发现是Run()锁定,GIT可能也要调用QueryInterface,并且没有使用FTM

今天换了IStream做Marshal居然好像创建了2个对象,被传递对象可以被还原成IScaleSet,但是无法通过它访问到IScaleRun,并且IScaleSet上调用的函数无法在主线程得到反映,而主线程中是可以做到的

继续建造中

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值