控件和控件容器指南概述

ActiveX 控件本质上是支持 IUnknown 接口的简单 OLE 对象。 它通常支持更多接口以提供功能,但所有其他接口可能被视为可选,因此,控件容器不应依赖任何其他支持的接口。 如果不指定控件必须支持的其他接口,控件可以有效地锁定特定功能区域,而无需支持将特定接口作为控件。 始终与 OLE 一样,无论是在控件还是控件容器中,都不应假设接口可用,并且应始终遵循标准返回检查约定。 控件或控件容器必须正常降级,并在所需接口不可用时提供替代功能。

ActiveX 控件容器必须能够承载最小的 ActiveX 控件;还支持容器中指定的许多其他接口。 容器可以选择支持许多接口和方法,并分组为称为组件类别的功能区域。 容器可能支持组件类别的任意组合,例如为数据绑定提供的组件类别,容器可能或可能不支持数据绑定功能,具体取决于容器的市场需求。 如果控件需要容器提供数据绑定支持才能正常运行,则会在注册表中输入此要求。 这样,控件容器只为它知道可以成功承载的那些控件提供插入。 请务必注意,组件类别被指定为 OLE 的一部分,并且不特定于 ActiveX 控件,控件体系结构使用组件类别来标识 OLE 组件可能支持的功能区域。 组件类别不是累积或独占,因此控件容器可以支持一个类别,而无需支持另一个类别。

对于需要可选功能或特定于特定容器的功能的控件,必须明确按照这些要求打包和销售。 同样,提供某些功能或组件类别的容器在营销和打包时必须提供承载 ActiveX 控件所需级别的支持。 如果接口或方法不可用,建议使用尽可能多的容器控制目标和测试,并正常降级以提供更少功能或替代功能。 如果控件在没有组件类别支持的情况下无法执行其指定作业功能,则应要求在注册表中输入该类别,以防止控件插入不适当的容器中。

这些准则定义控件可能期望控件容器支持的接口和方法,尽管与往常一样,当使用 QueryInterface 或其他方法获取指向这些接口的指针时,控件应检查返回值。 容器不应期望控件支持 IUnknown 接口以外的任何接口,这些准则确定控件可能支持的接口以及特定接口存在的意义。

为什么 ActiveX 控件和控件容器指南很重要

ActiveX 控件已成为开发可编程软件组件的主要体系结构,可用于各种不同的容器,从软件开发工具到最终用户生产力工具。 为了使控件能够在各种容器中正常运行,该控件必须能够假设可以在所有容器中使用的一些最低级别的功能。

通过遵循这些准则,控件和容器开发人员可提高控件和容器的可靠性和可互操作性,最终提供更好、更有用的组件来生成基于组件的解决方案。

所需接口不可用时怎么办

OLE 程序应使用 QueryInterface 来获取接口指针,并且必须检查返回值。 OLE 应用程序无法安全地假设 QueryInterface 将会成功。

此要求适用于所有 OLE 应用程序。 如果请求的接口不可用(即 QueryInterface 返回E_NOINTERFACE),则控件或容器必须正常降级,即使这意味着无法执行其指定的作业函数也如此。

ActiveX 控件和控件容器准则