修改微软TstCon容器源码,使其支持Python脚本和ActiveX控件交互

5 篇文章 0 订阅
3 篇文章 0 订阅
关于ActiveX和脚本交互请看https://baike.baidu.com/item/ActiveX%E8%84%9A%E6%9C%AC%E7%BC%96%E7%A8%8B/3350788?fr=aladdin本文不再赘述

微软TstCon用来加载ActiveX控件的一个容器,默认仅支持VBScript和JavaScript,其源码在VS2010安装目录下Samples文件夹内,至于为什么要修改使其支持Python脚本呢,原因主要有2点,

一是由于本人手头上的项目脚本是VBScript写的,遇到一个问题,就是当控件代码中有一个传递指针的事件函数,客户端需要响应该事件并修改那个指针变量返回给控件,控件根据这个指针变量值得不同来实现不同的逻辑,大家都知道,TstCon和脚本是来测试控件的,但是在脚本代码中,修改该指针变量后(VBScript通过ByRef来传递该参数)并不能返回到控件中,所以该事件功能并不能通过TstCon+VBScript来实现(加载ocx的最终客户端当然可以实现,但不具备通用性,本文的重点是TstCon+脚本来测试控件)

二是Python语言的强大性碾压了VBScript,采用Python后可以很方便的编写测试代码,方便管理

如何做:其实很简单,主要是修改容器的LoadScript函数,加载Python脚本引擎(windows要安装PythonWin且要和Python的版本一致,我采用的是python3.4),唯一遇到的问题是TstCon代码中, hResult = m_pDispatch->GetTypeInfo( 0, GetUserDefaultLCID(), &pTypeInfo );pTypeInfo无法获取,查阅资料得知,是因为无法获取类型库信息,这个pTypeInfo得不到,就得不到脚本中的函数和dispod的对应关系,当然资料上的说法是需要自己写一个idl文件然后用MIDL编译为tlb文件然后自己生成typelib,这样做太麻烦了,除了写脚本还要写IDL文件,当然我是拒绝的,万幸的是,GetIDsOfNames可以根据脚本中的函数名得到dispatchId,懂得com编程的都知道,只要有了函数名和dispatchId只要调用Invoke函数就能执行,那么只要自己解析脚本,得到其中的函数名,然后就到了对应关系,进而可以填充CScript类的m_mapMacros,经验证,问题1完美解决,因为Python可以返回值,目前为止,大功告成!


遗留的问题:既然GetIDsOfNames可以根据脚本中的函数名得到dispatchId,为何pTypeInfo这个指针无法获得??因为后边m_mapMacros也是通过pTypeInfo来填充dispID和函数名的,如果有大侠知道,不胜感激!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值