ActiveX控件

义项:微软的组件对象技术
ActiveX控件

ActiveX控件是微软在ActiveX技术框架下定义的一种可重用软件组件,建立在组件对象模型(COM)和对象链接与嵌入(OLE)技术之上,通常以动态链接库形式实现,可嵌入网页、桌面程序与开发工具中调用[1][2]。它于1996年随ActiveX战略推出,曾在Internet Explorer中直接承载网页内的可执行内容,是20世纪90年代浏览器扩展能力的重要实现方式[3]。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

ActiveX控件是遵循ActiveX规范、以组件对象模型(COM)为基础构建的可重用软件组件,支持OLE的多项功能,并可按需要定制以适配不同软件[1][4]。它可以带有自己的窗口,能够响应鼠标单击等事件,并通过包含属性和方法的接口接受宿主程序的管理,这与自动化对象的接口形式相近[4]。

它早期被称为OLE控件、OCX或OLE自定义控件,后来统一归入ActiveX名下[5]。从对象的角度看,ActiveX控件具有状态、行为和标识:状态由属性及其当前取值构成,行为对应可施加的方法,标识用于与其他对象区分,另外还带有在事件发生时发出通知的机制[5]。在文件形式上,它以进程内服务器的形态实现,多数以扩展名为ocx的动态链接库交付,在Visual C++等环境中可由MFC或活动模板库创建[1][4]。

原理

ActiveX控件的技术基础由几项相互配合的COM机制组成:COM本体提供接口协商,可连接对象负责事件通知,复合文档支持就地激活,属性页用于修改控件属性,OLE自动化提供可编程接口,对象持久性负责保存与恢复控件状态,此外还有系统提供的字体和图片对象用于绘制外观[1]。其中唯一必须实现的接口是IUnknown,其余接口按需要选配,因此控件的能力范围取决于实现了哪些接口[1]。

控件与容器之间主要靠两条通路通信:一条是容器通过调度映射调用控件公开的属性与方法,另一条是控件通过可连接对象向容器引发事件,并可在事件中携带参数以传递更多信息[4]。控件存在活动与非活动两种基本状态,传统上以是否拥有窗口区分;引入无窗口激活后这一界线不再绝对,但不少控件仍然沿用有窗口的活动方式[4]。

在网页中,控件通过object等HTML标记或脚本中的创建语句实例化,实例化时可以使用CLSID,也可以使用更易书写的ProgID,两者的关系类似IP地址与域名[6]。控件在系统中以组件的类别标识注册,是否可安全地接受脚本操作、是否可安全地从持久数据初始化,均由相应的类别声明与安全接口来标记[6]。


flowchart LR

A[HTML 页面 / 宿主程序] --> B[容器: 创建控件实例]

B --> C[CLSID 或 ProgID 定位]

C --> D[ActiveX 控件 COM 对象]

D --> E[属性与方法 dispatch]

D --> F[事件 可连接对象]

F --> A

发展历程

1996年,微软面对OLE 2.0规范的复杂性和MFC对COM支持不足的问题,对规范加以简化,并把相关技术更名为ActiveX;同年3月,微软公布了新的ActiveX开发战略[3][7]。即便经过简化,开发者仍需为控件实现约六个核心接口,微软随后以向导、ATL基类、宏和C++语言扩展等方式降低编写难度[3]。

与Internet Explorer 3.0同期,浏览器开始支持在HTML内容中承载ActiveX控件:遇到用object标记声明的控件,浏览器几乎不经用户干预便自动下载并安装[3]。这使网页能够运行更丰富的内容,也带来了平台限制与安全方面的质疑,微软此后陆续引入安装包数字签名、控件须自行声明可安全脚本化、更严格的默认安全设置以及不良控件黑名单等措施[3]。

跨平台方面,微软于1996年10月为Macintosh发布ActiveX软件开发工具包的测试版,并宣布当年晚些时候支持Solaris;1997年,NCompass Labs与微软合作推出供Netscape Navigator使用的插件以支持ActiveX[3]。ActiveX的核心技术文档由The Open Group托管,可免费获取[3]。随着.NET架构的推行,ActiveX所依托的COM被逐步视为上一代技术[8]。微软Edge仅在Internet Explorer模式下保留对ActiveX的支持,其常规扩展体系基于Chromium,与ActiveX并不兼容[3]。

应用

ActiveX控件的主要用处是让应用程序与网页快速获得现成功能,例如在页面中加入实时行情信息或动画效果,开发者无需了解控件内部实现即可把它当作预装配部件使用[2]。它可以由C++、Visual Basic、Delphi、PowerBuilder等多种支持COM的语言开发,并可运行于Windows窗体与HTML页面之中[2]。

在微软自身产品中,Internet Explorer、Microsoft Office、Microsoft Visual Studio 和 Windows Media Player 都用ActiveX控件搭建功能,同时也把自身功能封装成控件供其他程序嵌入[3]。在数据访问领域,ActiveX控件分为数据控件与数据绑定控件,前者封装数据库查询和结果行集,后者负责呈现数据并与数据控件连接[4]。在工业与机器视觉领域,也存在遵循ActiveX规范的组件工具包,涵盖成像处理、图像采集、几何运算与运动控制等功能[5]。

局限

ActiveX控件在原理上并不绑定Windows,但实际使用中绝大多数控件只能在Windows上运行,且由于内含编译后的机器码,客户端通常需要是x86架构的计算机[3]。这意味着如果网页把关键功能交给ActiveX控件实现,其可用范围就会受到明显限制;微软尽管做过跨平台努力,多数控件依然无法在各平台上通用[3]。与JavaBeans相比,ActiveX支持的编程语言更多,而JavaBeans支持的平台更多[3]。

安全模型的差别也是其局限之一。ActiveX的安全机制主要依靠Authenticode代码签名来确认组件开发者的身份,经识别的代码在浏览器内以完整权限运行,代码中的缺陷因此可能直接成为安全问题,这与当时Java采用的沙箱隔离思路不同[3]。此外,控件只有放入能够识别ActiveX的容器时才能发挥全部功能[4]。随着浏览器体系转向Chromium等新架构,ActiveX已被视为被淘汰的框架,新开发项目通常不再将其作为网页扩展方案[3]。

参见

参考资料

  1. ActiveX 控件 [引用日期2026-10-29]
  2. [科普中国]-ActiveX控件 [引用日期2026-10-29]
  3. Active_X [引用日期2026-10-29]
  4. 导入库文件有扩展名( [引用日期2026-10-29]
  5. google.com 上的网页 [引用日期2026-10-29]
  6. Contrôles ActiveX - 跳至主要内容 跳到 Ask Learn 聊天体验 [引用日期2026-10-29]
  7. download-documents [引用日期2026-10-29]
  8. X02-160503(PDF) [引用日期2026-10-29]
词条评价
词条统计

浏览次数:0 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:48:00Z

历史版本

本条目引用的词条
组件对象模型 活动模板库 Internet Explorer JavaBeans 对象链接与嵌入 Authenticode