多个ProgID可以指向相同的ClsID吗?

时间:2009-11-16 04:03:45

标签: windows com com-interop ole progid

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

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

所以,问题:

  1. 这是一种可接受的技术吗? (多个ProgID都指向单个ClsID)。
  2. 当我的插件加载时,是否可以告诉使用哪个ProgID来创建它?

1 个答案:

答案 0 :(得分:4)

Prog ID通常以两种方式使用:检测对应于prog id(CLSIDFromProgID()函数)的类id - 这用于稍后调用CoCreateInstance() - 并检测给定类id的prog id - 这通常用于显示类ID的人性化版本。

这些映射意味着HKCR {ProgId} \ CLSID键的默认值等于类id,HKCR \ CLSID {classid} \ ProgID键的默认值等于ProgId,这意味着映射是一对一的。您将无法在一个类ID下拥有多个prog id。

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