代码之家  ›  专栏  ›  技术社区  ›  Tim Long

多个progid可以指向同一个clsid吗?

  •  2
  • Tim Long  · 技术社区  · 15 年前

    我正在研究一组基本上是插件的东西,它们是COM服务器。每个插件都有一组由另一个组件管理的配置数据,配置数据的主键是插件的progid。当插件需要访问一个配置项时,它会调用并传递它的progID和所需属性的名称。这是一个遗留设计,我必须保持向后兼容性。

    现在我需要加载每个插件的多个实例,每个实例都有一组不同的配置数据。我正在考虑的解决方案是为每个插件创建多个唯一的progid,每个progid将指向插件的单个clsid。因此,插件的每个实例都将由其progid标识,progid仍然用作配置数据的主键,并且所有内容都是100%向后兼容的。

    所以,问题是:

    1. 这是可接受的技术吗?(多个progid都指向一个clsid)。
    2. 当我的插件加载时,它能分辨出哪个progid被用来创建它吗?
    1 回复  |  直到 15 年前
        1
  •  4
  •   sharptooth    15 年前

    prog id通常有两种用法:检测与prog id(clsidFromProgID()函数)对应的类ID-这用于稍后调用coCreateInstance()-以及检测给定类ID的prog id-这通常用于显示类ID的人性化版本。

    这些映射意味着存在一个默认值等于类ID的hkcr progid \clsid键和一个默认值等于progid的hkcr\clsid class id \progid键,这意味着映射是一对一的。一个类ID下不能有多个prog id。

    通过调用CoCreateInstance()来加载COM组件,该组件通过使用包含的clsidFromProgID()以任何可能的方式获得类ID。组件无法分辨类ID是如何获得的。