ActiveX技术彻底研究

品雪 pinxue@hotmail.com
http://pinxue.yeah.net

解题:有位朋友对我说,如果有人在你的团队中建议使用某种技术,那么一定要他把这种技术研究透,要到API层才算透,然后给团队写一份讲稿讲解这种技术,这样子才可以放心引入这种技术,否则是很冒险的。我觉颇以为然。一向以来对M$的ActiveX技术印象都不是很好,但这两天忽然想试试ActiveForm了,于是就有了这篇彻底研究。当然本文只是个人的彻底研究而矣,没有深挖到API内部的兴趣,或许哪天有了兴趣再搞一个深入内幕研究好了,不过那可能会是久远以后的事了,也许那会儿M$已经公开它的源码了吧。本文主要参考资料是MSDN。显然市面上已经有很多很好的同主题书籍了,建议你还是去看那些书学习比较好,俺这个主要还是给自己写的,做个浏览或参考或可胜任。

第一阶段:ActiveX技术总览

摘要:ActiveX是基于COM的一种对象重用技术,ActiveX导出对象及类工厂,ActiveX控制器及客户可以象使用自定义对象一样,ActiveX对象的功能与结构除了看使用说明书外还可以从相应的TypeLib中获取。


制作自动化控制器

  1. 使用TypeLib
  2. 使用双重接口

制作并导出ActiveX对象需要做以下事情:

初始化要导出的对象

  1. 初始化OLE。
  2. 注册要导出的对象的类工厂。
  3. 注册活动对象(active object).
实现要导出的对象
  1. 实现对象的IUnknown, IDispatch, 及虚方法表(VTBL)接口、属性与方法。
  2. 实现类工厂的接口与方法

导出对象

  1. 初始化Application对象。
  2. 使用全局名字空间访问Application对象成员。
  3. 使用命令行参数控制应用程序导出对象的方式。

在应用程序结束时释放OLE

  1. 解除类工厂和活动对象的活动。
  2. 解除OLE初始化。
要让其他人可以利用活动对象
  1. 建立类型库。
  2. 为应用程序建立一个注册文件(.reg)

使用ActiveX对象

 


重要函数列表

COM库:CoInitialize{Ex}、CoUnitialize、CoCreateInstance

OLE系统:OleInitialize、OleUnitialize

类对象(类工厂):RegisterClassObject、RevokeClassObject、GetClassObject

Active对象:RegisterActiveObject、RevokeActiveObject、GetActiveObject


第一阶段:VCL对ActiveX的封装 待续