组件类别及其工作原理

组件类别标识软件组件支持和需要的功能区域,将为每个类别或标识的功能区域使用一个注册表项。 每个组件类别均由一个全局唯一标识符 (GUID) 标识,当安装控件时,它会使用控件的组件类别 ID 将自身作为控件注册到系统注册表中,请参阅控件的自注册。 在控件自注册中,它还将注册它实现的组件类别,以及它需要容器支持的组件类别,以便成功托管控件。

当控件容器向用户提供要插入的控件时,它仅允许用户选择和实例化能够在该环境中正常运行的控件。 例如,如果控件容器不支持数据绑定,则容器将不允许用户选择并实例化在注册表中具有条目的控件,表示它们需要数据绑定组件类别。 提供用于插入控件的常用对话框和用于处理注册表项的 API。

组件类别不是累积或独占的,控件可能需要组件类别的任何组合才能正常运行。 若控件没有组件类别所需的条目,则可能需要能够在任何控件容器中运行,但不需要控件容器的任何特定功能即可正常运行。

此处标识了以下组件类别,其中可能提供了类别的必要详细规范。

这不是类别的明确列表;将来可能会随着标识新要求而定义其他类别。 Microsoft 提供了组件类别的最新列表;此列表反映 Microsoft 标识的组件类别,以及供应商已通知 Microsoft 的任何其他组件类别。

请务必记住,控件应尝试在尽可能多的环境中正常运行。 如果可能,控件应在放置在不支持某些接口的容器中时将其功能降级。 组件类别的目的是防止出现将控件放置在不适合且控件无法完成其所需任务的环境中的情况。 通常,当接口不存在时,控件应正常降级,控件可以选择向用户提供消息框,告知用户某些功能不可用或清楚地记录控件容器所需的功能,以获得最佳性能。

请注意,较旧的控件和容器不使用组件类别,而是依赖于根据注册表中的控件存在控件关键字。 为了较旧的容器控件可识别,可能需要在注册表中注册控件关键字,控件开发人员应在执行此操作之前,检查可以在此类容器中成功托管控件。 使用组件类别的容器可能会成功使用它们来托管较旧的控件,因为组件类别 DLL 会处理映射,较旧控件 CATID_ControlV1 存在单独的类别,以便容器可以根据需要在必要时将其排除。

由于组件类别由 GUID 标识,因此提供特定特定功能的容器可以使用 GUID 生成工具生成自己的类别 ID。 但是,这可能会破坏控件和容器的互操作性优势,因此最好尽可能使用现有组件类别。 建议供应商在定义新的组件类别时共同协商,以确保它们满足市场的常见要求,并遵循 ActiveX 控件互操作性的精神。

组件类别