ActiveX开发知多少?

简介:

由于前段时间要为一个项目定制一个电子地图+视频监控系统,考虑到公司现有的开发资源(C#项目组)及已经完成的下层业务框架(C++实现),选择了.net技术结合ActiveX来实现需求。由于下层业务框架是我编写的,所以开始了自己的编写Activex插件之旅。

按照我的习惯在接触一个新技术时并不会匆匆开始上手实现,而是在了解基本原理之后再着手。所以通过各种百科了解了一些关于ActiveX的背景和使用场景。又深入其背后的COM技术浏览了潘爱民老师的《COM本质论》这本书,了解了一下Activex背后的思想。于是乎在理清了ActiveX的基本脉络后开始了业务插件的编写。

ActiveX插件最基本的两个用法:方法接口和事件接口

方法接口是这么一个过程,调用——>等待结果返回。可是一个同步方法接口再结合js的单线程特性在界面端体验方面却有一个致命缺陷,在等待这个接口返回的时候整个界面会僵死,不能响应任何动作。

异步方法接口虽然能立马返回,但又如何来获取最终结果呢?刚好,事件接口可以解决这个问题,我们可以在前台注册这个事件,然后由ActiveX后台来响应这个事件,从而前台可以获取正确的结果,类似于我们熟悉的回调函数。 推荐阮一峰的这篇文章《Javascript异步编程的4种方法》来了解下以上我说的两种情况。

就这么简单?可是现实仿佛并不是如此,我们要把一个接口写成异步接口,肯定要在接口内部开启一个线程来执行耗时较长的操作,然后在操作完成后响应事件通知上层获取数据。这里有个坑,你要是在所启线程中去响应事件接口,前台是无法响应的。怎么办呢?解决方案在这里《How to start a second thread in an MFC-based ActiveX control to fire events in Visual C++》

备忘录

“爱遗忘这人类天性”也绝对是我们程序员的一个杀手锏,不说别的,影响工作效率!我一个月前写完了几个方法接口、事件接口后昨天因为需求更改再写时居然忘了IDE的快捷途径了,求助了google大神后搞定,所以我得为几个点建一个备忘录。

  • 备忘录1:如何在工程里添加方法、事件接口

    在这货这里添加方法:

    211951938.jpg

    在这货这里添加事件:

    212042406.jpg

    (注:如提示找不到事件接口的错误,自己手动在相应位置加上就好)

  • 备忘录2:ActiveX插件测试调试的两大利器

    TstCon32.exe,Microsoft ActiveX Control Pad;

  • 备忘录3:js脚本调用方法,事件的代码示例

这几点可以说明问题

212129775.jpg


另外还有些ActiveX空间的签名打包类的知识,很多前端的文章都有介绍,我就不在这献丑了。

本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/1325664如需转载请自行联系原作者


yaocoder

相关文章
|
安全 C++
步步学ACTIVEX网页控件开发
转载自IT168 [ http://www.it168.com/ ]   第1页:创建ActiveX控件   本文将首先介绍如何使用Visual Studio开发一个简单的ActiveX控件,然后介绍ActiveX控件开发相关的基础知识,比如方法,属性和事件等,最后介绍如何利用这些知识,实现ActiveX控件和网页页面之间的通信。
1258 0
codeplex上20个有意思的WPF程序
参考如下网址 http://10rem.net/blog/2010/11/22/20-interesting-wpf-projects-on-codeplex-some-for-silverlight-too   内容涉及: 框架、主题、控件、和工具等,实际工作中可以参考!
802 0
|
C# 开发者 Windows
Silverlight与WPF开发人员入门应该知道的十件事
【CSDN 陈秋歌编译】微软开发者社区部门项目经理Pete Brown在纳什维尔DevLink 2010会议上做了一个名为“10件事”的演讲。这个演讲包含了Silverlight与WPF开发人员入门时应该了解的十件事。
1066 0
|
Web App开发 程序员 数据库
019_《Delphi第三方控件使用大全Ⅱ》
《Delphi第三方控件使用大全Ⅱ》 Delphi 教程 系列书籍 (019) 《Delphi第三方控件使用大全Ⅱ》 网友(邦)整理 EMail: shuaihj@163.
2095 0
|
JavaScript 前端开发
delphi中Webbrowser疑难问题集锦<转>
1.获得网页中变量值      htm中 var currID=123      程序中可以这么调用 id := Form1.WebBrowser1.OleObject.Document.script.
827 0